gpt4 book ai didi

javascript - 调用父方法(原型(prototype))

转载 作者:行者123 更新时间:2023-11-28 07:32:16 25 4
gpt4 key购买 nike

我有这个代码:

function Shape() {}

Shape.prototype.init = function(coords, color) {
for(var i=0;i<coords.length;i++)
var block= new Block (coords[i],color);
};

Shape.prototype.draw = function() {

};

// ============= I_Shape ================================
function I_Shape(center) {
var coords = [new Point(center.x - 2, center.y),
new Point(center.x - 1, center.y),
new Point(center.x , center.y),
new Point(center.x + 1, center.y)];

Shape.prototype.init.call(this, coords, "blue");

}
I_Shape.prototype = new Shape();
I_Shape.prototype.constructor = I_Shape;

我想知道为什么I_Shape函数的最后一行有'init.call(...)'。是否有必要(在父函数中不使用上下文),或者可以用以下行替换?

Shape.prototype.init(coords,"blue");

显然,在第一个中您传递了上下文,但除此之外,这两者之间有什么区别?

最佳答案

你永远不应该假设父类(super class)函数不需要它的上下文。

仅仅因为 .init 方法现在不使用它,并不意味着它永远不会。事实上,该函数看起来几乎毫无用处,因为创建的 Block 对象被创建并将立即被 GC,因为没有其他东西保存对它们的引用。

另外,理论上你可以这样写:

this.init(coords, "blue")

原型(prototype)机制会自动调用父类(super class)的方法,而无需您显式命名。

如果您随后将 init 方法添加到 I_Shape,那么这就是您应该调用父类(super class)的 init 的地方来自构造函数的方法,而不是构造函数。

关于javascript - 调用父方法(原型(prototype)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29009353/

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