2011-12-13 71 views
0

我是新來javascipt的,我不能夠理解下面的代碼的Javascript的書,瞭解編碼技術

maskat.lang.Class.declare("maskat.key.KeyEventManager", { 

    _static: { 

     /** @scope maskat.key.KeyEventManager */ 

     getInstance: function() { 
      var self = arguments.callee; 
      if (!self.instance) { 
       self.instance = new this(); 
      } 
      return self.instance; 
     } 
    } 
}); 

在上面的代碼字「_static」意味着什麼?這是我的一個疑問,當我看到Javascript庫代碼時,我有這麼多疑問。

我可以在Javascript中編寫如此多的代碼,但我無法理解像上面這樣的編碼技術。

我必須參考哪本書來理解這種複雜的編碼技術。

+0

_static是在對象文本屬性名。否則,你的問題的編碼技術的一部分是可能的重複http://stackoverflow.com/questions/11246/best-resources-to-learn-javascript – mrk

回答

2

_static只是一個正在「即時創建」並作爲參數傳遞給declare函數的新對象的屬性。它被賦予另一個具有包含函數的getInstance屬性的對象。 _static不是JavaScript關鍵字。

當您看到類似var x = { }的東西時,您知道正在創建一個新對象並將其分配給一個新變量x。在這樣的對象內部,新屬性使用冒號分配,如x = { y : 2 }。因此,你可以訪問y,如:

var x = { y : 2 }; 

console.log(x.y); 
// or 
console.log(x['y']); 
+0

沒有看圖書館,我認爲它正在使用的'maskat.lang.Class.declare'來模擬一個類級別的屬性。 (JavaScript中基於類的繼承總是模仿,通常是通過庫實現的)。這裏的問題不是你不懂JavaScript,而是你不瞭解maskat庫。這裏的JS本身是相當基本的(除了'arguments.callee') – Amadan

+0

@Amadan,我想你在我的回答下發布了你的評論,而不是問題。 – Roman

+0

Ooops:'... x正被分配給一個新的對象。嚴格地說,對新對象的引用被分配給x,而不是相反。 – RobG

1

你能提供的書房maskat來源是什麼?由於JS使用的是prototyping,它比基於類的OOP更不常見,所以它很可能是一個基於類的基於JavaScript的第三方庫。

有很多庫提供基於類的OOP用於模擬基於類的OOP的OOP。你可以看着他們看到模式。

更新

既然你問的書,我會爲你提供參考學習JS