gpt4 book ai didi

javascript - 定义 Javascript 原型(prototype)

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

以下两种 Javascript 原型(prototype)之间的功能差异是什么?选择其中一种有什么好处?

选项 1:

Person.prototype.sayName = function(name) {
alert(name);
}

选项 2:

Person.prototype = {
sayName: function(name) {
alert(name);
}
}

我是否正确假设选项 2 会导致废弃某些隐式绑定(bind)到原型(prototype)的函数?

最佳答案

Am I correct in assuming that Option 2 results in trashing certain functions that are implicitly bound to the prototype?

是的,完全正确。尽管唯一隐式绑定(bind)的属性是 constructor 属性,但您很少需要它。

What are the functional differences?

选项 1 只是扩展现有原型(prototype)。如果已经有从原型(prototype)对象继承的 Person 实例,它们也将能够使用 sayName 方法。使用选项 2,新原型(prototype)将仅用于覆盖后实例化的对象。

Are there any benefits for choosing one over the other?

现在这些应该是不言自明的了。选项 1(扩展)被认为更干净,如果您要修改外国/未知/本地原型(prototype),则这是必须的。尽量避免选择 2。

如果您仍然更喜欢对象字面量语法,您应该考虑使用 Object.assign扩展现有原型(prototype):

Object.assign(Person.prototype, {
sayName: function(name) {
alert(name);
}
});

您可能需要polyfill Object.assign适用于 ES6 之前的环境。或者,$.extend_.extend工作也一样。当然,您最喜欢的库也为此提供了辅助函数。

关于javascript - 定义 Javascript 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610675/

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