在ES6中,我们可以执行匿名类:
var entity = class {
}
但是我们也可以实例化它:
var entity = new class {
constructor(name) { this.name = name; }
getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo
它背后的工作是什么,它将带来什么优势以及它也会带来什么警告?
匿名类实例-这是一个坏主意吗?
是的,非常糟糕。就像在ES5中一样糟糕new function() { … }
。
每次评估表达式时,这种书写风格都会导致创建新的构造函数和原型对象。如果使用这种方法创建多个对象,则它们将不会获得类/原型的任何好处。
如果您打算使用此模式来创建单例对象,那么您也会失败。构造函数仍然可以创建,甚至可以访问-使用可以轻松创建第二个实例new entity.constructor
,从而破坏了整个目的。
所以永远不要使用它。一个简单的对象文字更容易编写,读取和实例化:
var entity = {
name: 'Foo',
getName() { return this.name; }
};
console.log(entity.name); // Foo
不要被new class
模式通用的其他语言所迷惑,它在那里的工作方式与JavaScript完全不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句