gpt4 book ai didi

javascript - 为继承复制原型(prototype)?

转载 作者:可可西里 更新时间:2023-11-01 01:17:40 25 4
gpt4 key购买 nike

我一直在玩 JavaScript,特别是用类和诸如此类的东西模拟面向对象的编程。

我知道这种实现继承的方式

MyClass.prototype = new AnotherClass();

但我并不满意,我不喜欢我需要如何调用AnotherClass 的构造函数。所以我一直在玩,想出了一些似乎有效的东西,基本上想要第二个意见。

function clone (obj)
{
function CloneFactory () {}
CloneFactory.prototype = obj;

return new CloneFactory();
}

MyClass.prototype = clone(AnotherClass.prototype);

通过克隆原型(prototype),我们获得了它的一个新副本并将其分配给 MyClass 的原型(prototype),这样更改继承的属性就不会影响父级原型(prototype)的属性。就像这样 MyClass.prototype = AnotherClass.prototype

我运行了压力测试,这在某些情况下更有效,即当父级的构造函数中有很多代码时,否则它大致相同。另一个好处(或者至少我发现它是有益的)是它允许在某种程度上对子类隐藏信息。任何特权方法和成员都不会被继承。

我是否忽略了一些重大陷阱?

我不是 JavaScript 专家,实际上我是 JavaScript 的新手,所以我想对此发表第二意见,因为我似乎无法通过 Google 找到任何东西。我不想实现糟糕的代码:)!

最佳答案

几乎正是 Object.create 所做的。您编写的函数是该方法的非常标准的“polyfill”。

这是一种非常常见的抽象对象创建方式,可以更准确地反射(reflect)“真正的”原型(prototype)继承。绝对是一种安全的做事方式。

哦,这里是 Object.create 的 MDN 条目的链接,如果您感兴趣的话:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create/

您会在底部注意到它们实际上包含了 polyfill,除了一些安全检查和变量名外,它与您的代码几乎完全相同。

关于javascript - 为继承复制原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488540/

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