2011-12-13 45 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