gpt4 book ai didi

javascript - 定义 Javascript 原型(prototype)

转载 作者:可可西里 更新时间:2023-11-01 02:22:52 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)。如果已经有 Person 实例继承自原型(prototype)对象,它们也将能够使用 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/17474390/

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