gpt4 book ai didi

JavaScript - 构造函数中的继承

转载 作者:行者123 更新时间:2023-11-29 22:23:02 24 4
gpt4 key购买 nike

对于 JavaScript 项目,我们希望引入对象继承以减少代码重复。但是,我不能完全按照我想要的方式工作,需要一些帮助。

我们使用模块模式。假设有一个 super 元素:

a.namespace('a.elements.Element');
a.elements.Element = (function() {
// public API -- constructor
Element = function(properties) {
this.id = properties.id;
};

// public API -- prototype
Element.prototype = {
getID: function() {
return this.id;
}
};

return Element;
}());

还有一个元素继承自这个 super 元素:

a.namespace('a.elements.SubElement');
a.elements.SubElement = (function() {
// public API -- constructor
SubElement = function(properties) {
// inheritance happens here
// ???
this.color = properties.color;
this.bogus = this.id + 1;
};

// public API -- prototype
SubElement.prototype = {
getColor: function() {
return this.color;
}
};

return SubElement;
}());

您会注意到我不太确定如何实现继承本身。在构造函数中,我必须能够将参数传递给 super 对象构造函数并创建一个 super 元素,然后用于创建继承的元素。我需要一种(舒适的)可能性来访问新对象的构造函数中的 super 对象的属性。理想情况下,我可以对 super 对象进行操作,就好像它是新对象的一部分一样。

我还希望能够创建一个新的 SubElement 并对其调用 getID()

我想要完成的似乎是传统的基于类的继承。但是,我想使用原型(prototype)继承来完成它,因为那是 JavaScript 方式。这甚至可行吗?

提前致谢!

编辑:修复了评论中建议的私有(private)变量的用法。EDIT2:代码的另一个变化:重要的是 id 可以从 SubElement 的构造函数访问。

最佳答案

如果愿意,您可以使用 JavaScript 的原型(prototype)继承来实现类继承。 See this other answer一个完整的例子和讨论,你可以很容易地适应你的模式。

关于JavaScript - 构造函数中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191438/

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