gpt4 book ai didi

javascript - JavaScript 中的原型(prototype)继承 : I don't usually need calling the constructor of Parent object assigned to Child. 原型(prototype)

转载 作者:搜寻专家 更新时间:2023-11-01 04:38:18 25 4
gpt4 key购买 nike

我不是 JavaScript 的新手,但我一直无法理解有关其原型(prototype)继承的某些事情。

假设我们有 Parent 和 Child“类”(创建对象的 Parent 和 Child 函数)。为了能够创建 child ,我们首先需要

Child.prototype = new Parent();

难点在于:通过将原型(prototype)分配给 Child,我们又得到了一个对象 Parent,它在我们的代码中什么都不做,只是与 Children 共享其属性。 但是 Parent 的构造函数仍然被调用!如果 parent 表示,例如,某个 UI 对象,那么在我们的应用程序中我们将有一个我们实际上不希望的这样的对象创建!当然,这可能会影响我们应用程序的状态。

我看到了解决这个问题的方法:将某些参数传递给 Parent 构造函数,表明我们正在创建的对象仅用于原型(prototype),不用于一般用途,例如:

RedButton.prototype = new Button(FOR_PROTO_ONLY);

然后在 Parent 构造函数中决定是否做任何可显示的东西。但这是一个非常丑陋的解决方法!

在面向类的语言中,例如Java,我们根本没有这样的问题,因为继承不假设调用任何附加函数。我应该怎么做才能在我的程序中不使用这种丑陋的技术并且仍然能够创建一个漂亮的原型(prototype)层次结构?

最佳答案

您可以做的一件事是在构造函数中将父实例分配给它的原型(prototype)属性。这意味着您不必创建父级的无关实例,因此可以缓解您提到的可能最终定义额外 GUI 组件的问题。但是,这确实意味着在实例化子实例之前必须至少有一个父实例,因此仅这一点就将其用处限制在非常特殊的情况下。

这是一个例子:http://jsfiddle.net/xwwWZ/

var Child = function() {

this.throwATantrum = function() {

alert("Waaaaaaaaaah");

}
};


var Parent = function() {

// Set the prototype here to avoid having to create an extra instance elsewhere.
Parent.prototype = this;

this.sayHello = function() {

alert("Hello!");

}
};


// We must, however, instantiate an instance of the parent before we can
// instantiate an instance of a child.
var p = new Parent();


Child.prototype = Parent.prototype;

var c = new Child();

c.throwATantrum();
c.sayHello();

关于javascript - JavaScript 中的原型(prototype)继承 : I don't usually need calling the constructor of Parent object assigned to Child. 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124389/

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