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

Rat*_*ata 1 javascript

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

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中扩展类时需要使用?我将来会在项目中遇到这种代码概念的问题吗?

谢谢.

T.J*_*der 8

和...之间的不同

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.prototypeTest1.prototype都指向同一个对象.