2013-05-22 45 views
1

我看到有人寫這要擴展其他類時:使用的Object.create()來開發一個原型鏈

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構造爲卡LED。真正的問題是:

爲什麼我們需要在JavaScript中擴展類時使用Object.create? 在項目的未來,我是否會對此代碼的想法產生問題?

謝謝。

回答

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都指向相同的對象。

相關問題