在ES6中,我们可以进行匿名类:
var entity = class { }
但是我们也可以实例化它:
var entity = new class { constructor(name) { this.name = name; } getName() { return this.name; } }('Foo'); console.log(entity.getName()); // Foo
它背后的工作是什么,它将带来什么优势以及它也会带来什么警告?
匿名类实例-这是一个坏主意吗?
每次评估表达式时,这种书写风格都会导致创建新的构造函数和原型对象。如果使用这种方法创建多个对象,则它们将不会获得类/原型的任何好处。
如果您打算使用此模式创建单例对象,那么您也会失败。构造函数仍然可以创建,甚至可以访问-使用可以轻松创建第二个实例new entity.constructor,从而破坏了整个目的。
new entity.constructor
所以 永远不要使用它 。一个简单的对象文字更容易编写,读取和实例化:
var entity = { name: 'Foo', getName() { return this.name; } }; console.log(entity.name); // Foo
不要被这种new class模式很常见的其他语言所欺骗,它与JavaScript的工作方式大不相同。
new class