2013-03-05 70 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