【问题标题】:Class keyword and prototype in javascriptjavascript中的类关键字和原型
【发布时间】:2017-02-16 10:18:07
【问题描述】:

现在在 Javascript 中,在 ECMAScript 6 之后,可以使用 class 关键字声明类,这对于来自 Java 之类语言的程序员(我自己也是)来说非常好。

class MyClass {
    constructor(a, b) {
        this.a = a;
        this.b = b;
    }
    mult() {
        return this.a * this.b;
    }
}

但我们甚至可以使用定义类的原型方式。

// The same code as above, but with prototype.
function MyClass(a, b) {
    this.a = a;
    this.b = b;
}
MyClass.prototype.mult = function() {
    return this.a * this.b;
}

这两个 MyClass 的定义是一样的吗?为什么?任何人都可以帮助我区分定义类的“类”方式和基于内存消耗、性能等定义类的“原型”方式吗?谢谢。

【问题讨论】:

  • 您为什么不测量并获得问题的答案?作为 JS 开发人员,您担心声明封装代码的两种不同方式之间的内存消耗。这毫无意义。
  • 上面的代码是一样的,但是类通过extends关键字抽象了一个子类。当然你也可以不使用类做同样的事情,但这会比上面的比较复杂一些。

标签: javascript performance class memory


【解决方案1】:

是的,几乎一样,因为class 只是糖。 我知道的唯一区别是:

在这种情况下

class MyClass() {}

你不能做var obj = MyClass(),你必须提供new。在其他情况下,您可以。

【讨论】:

    【解决方案2】:

    它是原型方式的简单语法替代。

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

    Source

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        • 2018-11-17
        • 2010-12-16
        • 2016-02-25
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多