在 ES6 中,程序员可以使用 class 关键字定义匿名类,并立即使用 new 运算符实例化它们:
<code class="javascript">var entity = new class { constructor(name) { this.name = name; } getName() { return this.name; } }('Foo');</code>
虽然这看起来很方便,但了解其底层行为和潜在缺点至关重要。
在幕后,新的类表达式创建一个新的构造函数每次评估时都会返回函数和原型对象。这与常规类声明不同,常规类声明定义在所有实例之间共享的单个构造函数和原型。
a。内存消耗过多:
通过立即实例化,每次使用新类表达式创建对象时都会创建新的构造函数和原型。这可能会导致不必要的内存消耗,特别是在实例化大量对象的情况下。
b.缺乏继承:
使用新类模式创建的对象不会从父构造函数继承或共享公共原型。因此,它们失去了类的优点,例如继承、方法重用和多态性。
一些开发人员可能会使用这种模式来创建单例对象,但效果并不好。构造函数仍然可以访问,并且可以使用 newentity.constructor 创建第二个实例,这违背了单例的目的。
由于这些缺点,强烈建议不要这样做使用新的类模式。相反,为了简单性、可读性和实例化效率,应选择传统的对象文字:
<code class="javascript">var entity = { name: 'Foo', getName() { return this.name; } };</code>
以上是匿名类实例的陷阱:何时以及如何避免这个 JavaScript 陷阱?的详细内容。更多信息请关注PHP中文网其他相关文章!