2017-08-25 28 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 {...}'。 –