我在某些模塊中看到它們使用modules.exports.something =()->
或exports.something =()->
。出口與此差額
並且在其他一些時間用this.something =()->
完成。
顯然導致相同的行爲。這個比那個好嗎? this
是指exports
對象或類似的東西?
我在某些模塊中看到它們使用modules.exports.something =()->
或exports.something =()->
。出口與此差額
並且在其他一些時間用this.something =()->
完成。
顯然導致相同的行爲。這個比那個好嗎? this
是指exports
對象或類似的東西?
exports
和module.exports
通常存在於提供某種模塊加載系統的環境中。例如Node.js使用CommmonJS模塊系統。 RequireJS提供了一個AMD風格的系統。在瀏覽器中加載的網頁不會額外載入某種模塊系統(如RequieJS),因此將不會定義exports
和module.exports
。如果手邊有一個模塊系統並且想要導出值,通常情況下,您會將要導出的內容分配給exports
或module.exports
或這些對象上的字段。
this
指的是高度依賴於上下文。如果您創建的文件只有console.log(this)
並使用Node.js運行它,則會看到{}
輸出到控制檯。如果您在Chrome中加載的空白HTML頁面中嘗試使用相同的內容,則會看到this
是window
對象。因此,在瀏覽器中,在最外面的範圍內分配this.foo
相當於分配給window.foo
,並且是在全局空間中聲明foo
的一種方式。您有時會看到的代碼旨在適用於各種環境,這些環境將根據運行的位置更改this
的值。喜歡的東西:
function factory() {
this.foo = function() {...};
this.bar = "q";
}
if (typeof exports !== 'undefined')
factory.call(exports); // CommonJS or AMD environment.
else if (typeof window !== 'undefined')
factory.call(window); // Browser.
else
factory.call(this); // Something else.
使用call
方法上類似上面的factory
函數設置的this
內部factory
傳遞給call
所述第一參數的值。