2017-08-25 49 views
0

人们可以围绕构造函数创建一个封闭持有,比如说,对实例的唯一ID:封闭各地类的构造函数在ES2015(ES6)班

const MyObject = (() => { 
    let id = 0; 

    return function() { 
    this.id = id++; 
    }; 
})(); 

一个将如何实现与类的语法一样吗?有没有办法在班级的constructor函数上创建一个闭包?

回答

4

是,使用class expressions你可以这样做:

const MyObject = (() => { 
 
    let id = 0; 
 

 
    return class MyObject { 
 
    constructor() { 
 
     this.id = id++; 
 
    } 
 
    }; 
 
})(); 
 

 
console.log(new MyObject().id); 
 
console.log(new MyObject().id); 
 
console.log(new MyObject().id);


或者你也可以与普通类的声明做到这一点。

const MyObject = (() => { 
 
    let id = 0; 
 

 
    class MyObject { 
 
    constructor() { 
 
     this.id = id++; 
 
    } 
 
    } 
 

 
    return MyObject; 
 
})(); 
 

 
console.log(new MyObject().id); 
 
console.log(new MyObject().id); 
 
console.log(new MyObject().id);

+0

仅供参考,有可能通过一个新引用原替换上'MyObject.prototype.constructor'功能包只有构造函数,但我认为环绕整个事情似乎更清洁。 – spanky

+0

只是FYI,你甚至可以忽略这个名字:'return class {...}'。 –