1

我见过有人在想扩展另一个类时写这个:

Test2.prototype = Object.create( Test1.prototype );

但我也这样做了:

Test2.prototype = Test1.prototype;

并且有效(至少在以下示例中):

var Teste1 = function() 
{
    this.value = 'Teste1';
}
Teste1.prototype = {
    value:'no-class',
    print:function()
    {
        console.log( this.value );
    }
}

var Teste2 = function()
{
    Teste1.apply( this );
}
Teste2.prototype = Teste1.prototype;

var t = new Teste2();
t.print();

控制台打印Teste1,这意味着调用了 Teste1 构造函数。真正的问题是:

为什么Object.create在 javascript 中扩展类时需要使用?将来我会在项目中遇到这种代码想法的问题吗?

谢谢。

4

1 回答 1

8

和...之间的不同

Test2.prototype = Object.create( Test1.prototype );

Test2.prototype = Test1.prototype;

是在第一个示例中,您正在创建一个用作其原型的对象。Test1.prototype在第二个示例中,您只是将Test2.prototype属性指向指向的同一对象Test1.prototype

这具有重要的影响,特别是如果您通过Test2.prototype参考添加属性:

Test2.prototype.newProperty = 42;

...在第一个示例中,您最终不会更改对象Test1.prototype指向,但在第二个示例中,您会这样做,因为Test2.prototypeTest1.prototype都指向同一个对象。

于 2013-05-22T16:05:48.300 回答