定义 JavaScript 原型:了解差异
在 JavaScript 中定义对象原型对于继承和代码可重用性至关重要。然而,原型定义有两种常见的方法:扩展现有原型或完全覆盖它。
选项 1:扩展现有原型
Person.prototype.sayName = function(name) { alert(name); }
这种方法通过添加新方法 sayName 来扩展当前原型对象 Person.prototype。 Person 的现有实例将继承这个新方法。
选项 2:覆盖原型
Person.prototype = { sayName: function(name) { alert(name); } }
与选项 1 不同,此方法为 Person 分配一个新的原型对象.prototype,覆盖原来的。只有 Person 的未来实例才会继承 sayName 方法。
功能差异和好处
主要功能差异是选项 1 允许现有实例访问新方法,而选项 2 只影响未来的实例。
另一个区别是,通过覆盖原型(选项 2),您可以无意中丢弃了先前在原始原型中定义的任何其他属性或方法。虽然这些通常只包含构造函数属性,但值得注意的是这种潜在的缺点。
建议
选项 1(扩展)通常被认为更简洁和健壮,因为它确保Person 的所有实例都可以访问 sayName。除非出于特定原因需要重新初始化原型,否则请避免使用选项 2。
替代方法
如果选项 2 的对象字面语法对您有吸引力,请考虑使用 Object。分配以扩展现有原型:
Object.assign(Person.prototype, { sayName: function(name) { alert(name); } });
以上是扩展与覆盖 JavaScript 原型:哪种方法最好?的详细内容。更多信息请关注PHP中文网其他相关文章!