【发布时间】:2012-01-04 09:15:44
【问题描述】:
我正在尝试将原型继承应用于 Javascript 中的函数。这一切都很简单,甚至在Wikipedia's javascript lemma 中有描述。如果我的属性是简单的 javascript 类型,它就可以工作:
function Person() {
this.age = 0;
this.location = {
x: 0,
y: 0,
absolute: false
};
};
function Employee() {};
Employee.prototype = new Person();
Employee.prototype.celebrate = function () {
this.age++;
}
var pete = new Employee();
pete.age = 5;
pete.celebrate();
var bob = new Employee();
bob.celebrate();
console.log("bob is " + bob.age + " pete is " + pete.age);
使用Employee.prototype = new Person();,Person 的所有属性和(原型)方法都由 Employee 继承,这是继承的基础。
这按预期工作:bob is 1 pete is 6
现在我开始摆弄皮特的位置(庆祝之后)
pete.celebrate();
pete.location.absolute=true;
显示 bob.location.absolute 显示:true,这很不直观(我没有触摸 bob 的位置,所以我希望它具有在 Person 中声明的初始值)并破坏了我的解决方案。
在我最初的理解中,这应该是错误的。我确实意识到我可能应该从初始 Person 克隆位置对象,但我不确定在哪里或如何执行此操作。 如果有更好的继承技术?
【问题讨论】: