2013-11-20 29 views
0

我想爲閉包編譯器聲明一些externs,但不知道該怎麼做?我應該用什麼語法來爲閉包編譯器聲明extern?

(function(window) { 
window.myapi = window.myapi || {}; 

var myapi = window.myapi; 

myapi.hello = function() { 
    window.document.write('Hello'); 
} 
}(window)); 

我不知道如何做到這一點window.myapi,window.myapi.hello?

回答

3

Externs是有效的JavaScript,但它們只是類型信息。它們不應該包含定義(或者僅用於函數空的定義)。

這裏是一個開始:How to Write Closure-compiler Extern Files Part 1

您的具體例子有兩點要注意:

  1. 不要使用匿名包裝。類型名稱必須是全局的。
  2. 窗口對象上的屬性與命名空間示例相同。
  3. 功能不應該有實現

這裏有一個修正的例子:

/** @const */ 
window.myapi = {}; 

/** @return {undefined} */ 
window.myapi.hello = function() {}; 

window(全局)對象關閉編譯性能被認爲完全不同於全局變量。如果你同時需要,你必須聲明兩次。

/** @const */ 
var myapi = {}; 

/** @return {undefined} */ 
myapi.hello = function() {}; 
+0

我有一些問題,因爲語法:var x = {};不聲明window.x,我需要declare window.x = {}; – Chameleon

+0

與命名空間相同。我會編輯答案。 –

+0

問題是我必須使用匿名包裝,因爲我根本不想污染或者被污染的全局範圍。感謝解釋我需要兩次window.namespace和名稱空間聲明。我更喜歡控制語法,所以會使用長的語法窗口,但非常安全。 – Chameleon

相關問題