我想看到有人想要扩展另一个类时写这个:
Test2.prototype = Object.create( Test1.prototype );
Run Code Online (Sandbox Code Playgroud)
但我也这样做了:
Test2.prototype = Test1.prototype;
Run Code Online (Sandbox Code Playgroud)
并且工作(至少在以下示例中):
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();
Run Code Online (Sandbox Code Playgroud)
控制台打印Teste1,这意味着调用了Teste1构造函数.真正的问题是:
为什么Object.create在javascript中扩展类时需要使用?我将来会在项目中遇到这种代码概念的问题吗?
谢谢.
和...之间的不同
Test2.prototype = Object.create( Test1.prototype );
Run Code Online (Sandbox Code Playgroud)
和
Test2.prototype = Test1.prototype;
Run Code Online (Sandbox Code Playgroud)
就是在第一个例子中,你正在创建一个用作原型的新对象Test1.prototype.在第二个例子中,你只是指点Test2.prototype在属性相同的对象是Test1.prototype指向.
这具有重要的后果,特别是如果您通过Test2.prototype引用添加属性:
Test2.prototype.newProperty = 42;
Run Code Online (Sandbox Code Playgroud)
......与第一例子中,你最终不会改变对象Test1.prototype点,但是在第二个例子中,你这样做,因为两者Test2.prototype并Test1.prototype都指向同一个对象.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |