用于类定义的首选JavaScript成语

时间:2014-07-31 16:20:56

标签: javascript class prototype

在JavaScript中定义类的首选习惯用法是什么?我可以为复数定义构造函数,如下所示:

function Complex(real, imag) {
    this.real = real;
    this.imag = imag || 0.0;
    this.add = function(other) {
        this.real += other.real;
        this.imag += other.imag;
        return this;
    }
}

或者我可以做以下事情:

function Complex(real, imag) {
    this.real = real;
    this.imag = imag || 0.0;
}

Complex.prototype = {
    add : function(other) {
        this.real += other.real;
        this.imag += other.imag;
        return this;
    }
}

由于教科书 JavaScript:好的部分 JavaScript的权威指南都没有定义类的第一种方式,我怀疑这些是不是等价的 - 我怀疑如果我计划使用继承,我需要使用prototype。这对我来说似乎有点模糊 - 任何人都可以澄清这个吗?

我知道我可以使用前面提到的文本中建议的Object.create()方法,并以原型的方式做事,但我不会在实践中看到人们这样做。

1 个答案:

答案 0 :(得分:0)

在第一个示例中,每个新对象都有自己的add()方法副本。

在第二个示例中,每个新对象通过add()共享prototype函数的单个副本。

显然后者更有效率。