JavaScript有类吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

上周我和一位朋友发生了争执。他表示,JavaScript中没有类。

我说过你可以说 var object = new Object()

他说“因为没有class用过的词,这不是一堂课。”

谁是对的?

作为一个说明; 以后你需要一个简洁的Classy JS工具:

https://github.com/tnhu/jsface

2017年7月

在ECMAScript 2015中引入的JavaScript类主要是基于JavaScript的现有基于原型的继承的语法糖。类语法没有为JavaScript引入新的面向对象的继承模型。JavaScript类提供了一种更简单更清晰的语法来创建对象并处理继承。

- Mozilla ES6类:https//developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes

提问于
用户回答回答于

从技术上讲,“JavaScript没有类”的说法是正确的。

虽然JavaScript是面向对象的语言,它不是基于类的语言 -它是一种基于原型的语言。这两种方法之间存在差异,但由于可以像使用基于类的语言一样使用JavaScript,因此许多人(包括我自己)通常只将构造函数称为“类”。

用户回答回答于

这是一个与ECMA 6相匹配的小更新。

js中的类已经在2015年的ECMA脚本6中引入,现在正确地使用它们,像其他基于类的Java语言一样使用它们。当然有一些差异。但现在在js编程中可以使用例如以下代码:

class Animal { 
  constructor(name) {
    this.name = name;
  }


class Dog extends Animal {
  speak() {
    console.log(this.name + ' barks.');
  }
}

来源:https//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

这与经典的基于类的语言有一些共同之处。问题仍然是浏览器支持这项刚刚开始的新技术。所以在生产产品上使用它还是不好的。但我毫不怀疑这个问题会很快得到解决。

因此,问题依然存在,因为这个新特性的实现或者它仍然是面向对象原型的编程语言,js已经成为基于类的编程语言。

正如Codemagician在他/她的评论中指出的那样,在js或java或其他“基于类的”编程语言中如何工作类之间存在一些深刻的区别。

扫码关注云+社区