gpt4 book ai didi

javascript - 如何使用原型(prototype)继承来初始化 JavaScript 中的成员变量

转载 作者:行者123 更新时间:2023-11-28 02:57:45 24 4
gpt4 key购买 nike

我正在尝试了解原型(prototype)继承,并对共享成员变量有疑问。

我有一个对象:

var objA = {
list: [],
myPush: function(aParam){
this.list.push(aParam);
}
}

并尝试使用 http://javascript.crockford.com/prototypal.html 中的 object() 函数“原型(prototype)继承”它

var objB = object(objA);

但不知何故,对 objA 的更改会转移到 objB:

objA.myPush('a string');
equals(objA.list.length, 1);
equals(objB.list.length, 0); //<= Fails. Why?

测试失败的完整代码:http://jsbin.com/izawi/edit

有人可以向我解释一下吗?以及可能的修复。我可以有一个 constuct() 函数,但这似乎不对。

提前致谢

马蒂亚斯

最佳答案

正如之前的线程中所公开的,Crockford 的对象函数略有损坏。让我看看是否能找到有问题的 SO 线程。

“传统”构造函数继承的工作原理:

var a = {
list: [],
myPush: function(aParam){
this.list.push(aParam);
}
}

function B () {}
B.prototype = a;

var b = new B();
a.myPush('a string');

b.list.length == a.list.length; // true

这比“正确的”原型(prototype)继承稍微不那么纯粹 - 构造函数从对象继承,而不是对象从对象继承。是的,我也感觉不太对劲。不,我无法完全解释为什么克罗克福德的对象函数在这方面失败了。我想这就是世界运转的方式。

更新:这是我正在考虑的相关讨论:Implementing instance methods/variables in prototypal inheritance

关于javascript - 如何使用原型(prototype)继承来初始化 JavaScript 中的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176512/

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