gpt4 book ai didi

javascript原型(prototype)继承和对象属性

转载 作者:数据小太阳 更新时间:2023-10-29 05:19:56 24 4
gpt4 key购买 nike

我正在尝试将原型(prototype)继承应用于 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 的所有属性和(原型(prototype))方法都由 Employee 继承,这是继承的基础。

这按预期工作:bob 是 1 pete 是 6

现在我开始摆弄 pete 的位置(在庆祝之后)

pete.celebrate();
pete.location.absolute=true;

显示 bob.location.absolute 显示:true,这是违反直觉的(我没有触及 bob 的位置,所以我希望它具有在 Person 中声明的初始值>) 并破坏了我的解决方案。

在我最初的理解中,这应该是错误的。我确实意识到我可能应该从初始 Person 克隆位置对象,但我不确定在哪里或如何执行此操作。是否有更好的继承技术?

最佳答案

当您实例化一个新的 Employee 时,Person 的所有属性都会被复制。由于这是一个浅拷贝,pete 和 bob 共享同一个位置对象。对于您的问题,似乎没有很好的解决方案。您可以使用框架或像这样进行黑客攻击:

function Employee() { Person.apply(this); };

这会在 this 对象的上下文中调用 Person 构造函数。

MDC 对此有更多信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

关于javascript原型(prototype)继承和对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com