在 ES6 中,定义匿名类的能力为类声明提供了语法糖。虽然很方便,但立即实例化此类类可能会导致大量问题。
当立即实例化匿名类时,JavaScript 会创建一个新的构造函数并动态原型对象。表达式的每次求值都会产生不同的构造函数和原型。
这种做法有几个明显的缺点:
缺乏可重用性:
与命名类不同,立即实例化的匿名类每次都会创建一个新的构造函数和原型。这意味着多个实例不会共享相同的原型,失去了类继承和原型共享的好处。
单例谬误:
如果使用此模式背后的意图是创建单例对象,它会失败。构造函数仍然可访问,允许使用新的entity.constructor创建多个实例。
共识很明确:应避免立即实例化匿名类。简单的对象字面量提供了一种更高效、更直接的替代方案:
var entity = { name: 'Foo', getName: function() { return this.name; } };
虽然新的类模式在其他一些语言中是可以接受的,但它在 JavaScript 中的行为有所不同。 JavaScript 类创建的动态本质排除了这些语言所享有的优势。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3