基于原型的继承:深入研究“new”关键字的角色
当使用名为 WeatherWidget 的新函数扩展 Widget 类时,原型分配:
WeatherWidget.prototype = new Widget;
起着至关重要的作用。 'new' 关键字调用 Widget 构造函数并将其返回值分配给 WeatherWidget 的原型属性。
如果省略,此操作将引发错误或可能污染全局命名空间。通过使用“new”,Widget 构造函数被调用,确保正确的初始化和有效的返回值。
但是,这种方法创建了一个场景,其中所有 WeatherWidget 实例都从同一个 Widget 实例继承属性,并在它们之间共享值。这可能不符合继承原则。
要纠正此问题并实现真正的基于类的继承,应采取以下步骤:
function Dummy () {} Dummy.prototype = Widget.prototype;
WeatherWidget.prototype = new Dummy();
WeatherWidget.prototype.constructor = WeatherWidget;
此方法确保 WeatherWidget 实例继承属性通过原型链,彼此之间不共享值。
为了更简洁ECMAScript Ed 中的解决方案。 5 及更高版本,请考虑使用:
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
或者,对于通用继承实现,请探索 Function.prototype.extend()。此方法可以轻松实现原型扩充,并为调用父方法提供方便的“超级”访问功能。
以上是'new” 关键字如何影响 JavaScript 中基于原型的继承?的详细内容。更多信息请关注PHP中文网其他相关文章!