Ric*_*ler 11 javascript oop prototype
以下两个Javascript原型之间有什么功能差异,选择一个原型有什么好处?
选项1:
Person.prototype.sayName = function(name) {
alert(name);
}
Run Code Online (Sandbox Code Playgroud)
选项2:
Person.prototype = {
sayName: function(name) {
alert(name);
}
}
Run Code Online (Sandbox Code Playgroud)
假设选项2导致某些隐含绑定到原型的函数被废弃,我是否正确?
假设选项2导致某些隐含绑定到原型的函数被废弃,我是否正确?
对,就是这样.虽然唯一隐含约束的属性是constructor属性,但您很少需要它.
有什么功能差异?
选项1只是扩展现有的原型.如果已经有Person从原型对象继承的实例,那么它们也可以使用该sayName方法.使用选项2,新原型将仅用于在覆盖后实例化的对象.
选择其中一个是否有任何好处?
这些应该是现在自我解释.选项1(扩展)被认为是更清晰的,如果您正在修改外来/未知/原生原型,则必须使用它.尽量避免选项2.
如果您仍然更喜欢对象文字语法,则应考虑使用Object.assign扩展现有原型:
Object.assign(Person.prototype, {
sayName: function(name) {
alert(name);
}
});
Run Code Online (Sandbox Code Playgroud)
您可能需要填充工具Object.assign为ES6前环境.或者,$.extend或者_.extend也可以.当然,您最喜欢的库也带有辅助功能.