2015-11-20 19 views
3

由於它目前通過Babel + Webpack編譯,所以模塊的導出類將創建一個閉包:在模塊內部創建的變量將在類實例之間共享。ES2015導出的類是否創建一個閉包?

bar.js

let foo; 

export default class Bar { 
    set foo(value) { 
     foo = value; 
    } 
    get foo() { 
     return foo; 
    } 
} 

app.js

import Bar from './bar.js'; 

var barOne = new Bar(); 
var barTwo = new Bar(); 

barOne.foo = 'quux'; 
console.assert(barTwo.foo === 'quux'); 

我如果按照規範這個水煤漿正確的懷疑。

+0

如果你改用'this.foo == value',會發生什麼? :) –

+0

在二傳手。我會說'foo'是一個類(aka靜態)屬性,而'this.foo'是一個實例。 –

+2

等一下。我甚至沒有看到'讓富有;'那裏。當然這兩個班都是一樣的。這個例子與類實際上沒有任何關係,但是模塊('export'和'import')的模式應該可以工作。 –

回答

2

我不知道這個行爲是否按規範正確。

是。 JavaScript具有詞彙範圍。這不會隨着課程而改變。

請記住,類或多或少只是構造函數的語法糖+ prototype。如果你寫了

let foo; 

function Bar(){}; 

Bar.prototype = { 
    set foo(value) { 
     foo = value; 
    } 
    get foo() { 
     return foo; 
    } 
}; 

module.exports = Bar; 

取而代之嗎?

相關問題