使用Object.create()开发原型链

时间:2013-05-22 16:04:02

标签: javascript

我想看到有人想要扩展另一个类时写这个:

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构造函数。真正的问题是:

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

感谢。

1 个答案:

答案 0 :(得分:8)

之间的区别
Test2.prototype = Object.create( Test1.prototype );

Test2.prototype = Test1.prototype;

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

这有重要影响,特别是如果您通过Test2.prototype引用添加属性:

Test2.prototype.newProperty = 42;

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