gpt4 book ai didi

javascript - 借用构造函数和原型(prototype)链

转载 作者:行者123 更新时间:2023-11-30 13:43:49 25 4
gpt4 key购买 nike

在许多书籍和在线教程中都有将数据传递给父类(super class)的示例通过借用方法模式构造函数:

var Parent = function(name)
{
this.name = name;
this.my_parent = "parent_property";
this.go = function()
{
alert("GO")
}

}

var Child = function(name)
{
this.name = name;
this.my_child = "child_property";

Parent.call(this);

alert(this.hasOwnProperty("go")) // HERE TRUE!!!
}

var ChildChild = function(name)
{
this.name = name;
this.su = function(){}
}

// PSEUDO CLASSICAL ECMA STANDARD
Child.prototype = new Parent("PARENT");
ChildChild.prototype = new Child("CHILD");
var c = new ChildChild("CHILDCHILD");

现在我的问题是:这是正确的吗?在那个模式中,父类(super class)的属性被复制到 THIS 但在 OOP 系统中我认为这些属性必须在它的超一流。现在借用构造函数只是另一种进行某种继承的模式,所以我不能使用原型(prototype),所以所有的链父类(super class)属性都是进入最后一个子类......但我认为它效率不高。

那么,最后,如果没有这种模式,我该如何将数据传递给父类(super class)呢?

谢谢

最佳答案

通过调用 .call() ,您并没有继承传统意义上的继承,而是告诉 Child 将 Parents 原型(prototype)应用于自身,因此 Child.prototype 从 Parent 克隆了属性和方法。这在性能方面没有任何问题,尽管出于效率原因放弃原型(prototype)不是一个正当理由。

老实说,我认为将 OO 范式强加到 javascript 上是 javascript 开发人员可能犯的最大错误。就像必须学习处理函数式编程中的不变性一样,试图让 javascript 表现得像经典的 OO 从长远​​来看只会对你不利。

它没有回答您的问题,但有很多不同的应用方式 a super functionality to javascript我不能推荐其中任何一个,因为没有一个最终版本不会在某个地方带来缺点。

关于javascript - 借用构造函数和原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686290/

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