理解对象继承中的 'new' 关键字
在两个对象构造函数之间创建继承时,'new' 关键字起着至关重要的作用。让我们在以下代码的上下文中探讨其目的:
WeatherWidget.prototype = new Widget;
这里,目标是使用新的 WeatherWidget 构造函数扩展 Widget 构造函数。通过使用 'new' 关键字,我们有效地将 Widget 作为构造函数调用,并将其返回值分配给 WeatherWidget 的原型属性。
省略 'new' 的影响
如果我们在代码中省略“new”关键字,结果将会不同。如果没有“new”,Widget 将不会被作为构造函数调用,除非添加了参数列表。此外,在严格模式代码中可能无法以这种方式调用 Widget,因为如果实现符合 ECMAScript Ed,构造函数中的“this”引用可能会绑定到全局对象。 5.x.
使用“new”的潜在问题
虽然使用“new”允许我们创建继承,但它也有缺点。例如,WeatherWidget 的所有实例都将从同一个 Widget 实例继承。这意味着从 Widget 实例继承的任何属性值都将在所有 WeatherWidget 实例之间共享。
替代继承方法
实现基于类的继承的更合适的方法在基于原型的语言中,使用以下方法:
function Dummy () {} Dummy.prototype = Widget.prototype; WeatherWidget.prototype = new Dummy(); WeatherWidget.prototype.constructor = WeatherWidget;
此方法确保 WeatherWidget 实例通过原型链之间不共享财产价值。此外,正确设置了“构造函数”属性,以便每个 WeatherWidget 实例都指向正确的构造函数。
ECMAScript 5 及更高版本
在 ECMAScript 5 及更高版本中,以下语法可用于创建继承:
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
此语法的优点是使结果'constructor' 属性不可写、不可枚举、不可配置。
总之,对象继承中的 'new' 关键字有特定的用途,但其使用应谨慎,以避免潜在的问题。可以使用其他继承方法来提供更大的灵活性和控制力。
以上是'new” 关键字如何影响 JavaScript 中的对象继承?的详细内容。更多信息请关注PHP中文网其他相关文章!