javascript继承的对象在赋值时创建了新的数据成员?

时间:2013-03-05 21:17:23

标签: javascript inheritance prototypal-inheritance

我们的代码如下所示:

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());

输出: 某物 某物 莱维斯 Levis的

所以,一切都按预期工作!但是,问题是,只要我们执行jeans.name =“Levis”赋值,我们就会在调试器中看到TWO'的名字。一个用于父产品,一个用于服装。那不是记忆浪费吗?因为name是父项的属性,所以我希望这个属性会被使用,而不是创建一个新属性。

关于为什么的任何想法?

感谢

利奥尔

1 个答案:

答案 0 :(得分:0)

实际上,当我完成打字时,我意识到了答案:Javascript实际上非常聪明,以这种方式行事。如果Product会受到服装更改的影响,那么任何Product派生对象的所有后续实例都将包含任何派生对象的最后更改。

因此,原型继承语言需要它

谢谢大家,现在很清楚。 利奥尔