我想看到有人想要扩展另一个类时写这个:
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
?
我将来会在项目中遇到这种代码问题吗?
感谢。
答案 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.prototype
和Test1.prototype
都是指向相同的对象。