2013-03-05 43 views
0

我們有一個看起來像下面這樣的代碼:JavaScript繼承對象創建新的數據成員的任務?

var Product = function(){ 


    } 
Product.prototype = 
    { 
       GetName: function(){ 
      return this.name; 
     }, 

     name: "something" 
    }; 

var Apparel = function(){ 

    } 

Apparel.prototype = Object.create(Product.prototype); 

var jeans = new Apparel(); 
console.log(jeans.name); 
console.log(jeans.GetName()); 

jeans.name = "Levis"; 
console.log(jeans.name); 
console.log(jeans.GetName()); 

輸出: 東西 東西 李維斯李維斯

所以,一切正常,因爲它應該!但問題是,只要我們執行jeans.name =「Levis」賦值,我們就會在調試器TWO的名稱中看到它。一個是父母產品,一個是服飾。這不是一種記憶浪費嗎?因爲name是父類的屬性,所以我期望這個屬性會被使用,而不是創建一個新的屬性。

有什麼想法爲什麼?

感謝

利奧爾

回答

0

實際上,我完成了打字,我意識到了答案:它實際上是非常聰明的Javascript以這樣的方式來行事。如果產品受到服裝更改的影響,則任何產品派生對象的所有後續實例都將承載任何派生對象的最後更改。

所以,它是由一個原型繼承語言

感謝大家,現在它明確需要。 Lior