2012-07-28 36 views
1

我是JavaScript的一员,只是学习一些基本的东西(函数,变量等),我对JavaScript中的复杂结构知之甚少。奇怪的结构,这是什么意思?

当我阅读其中一个web应用程序的源代码时,有一个重要的一点是我无法理解。下面的代码:

Helper.using('py.Figures' , function (ns) { 
    ns.Point = function (params) { 
     ns.Figure.call(this, params); 
     this.setType('Point'); 

     this.visual(new Kinetic.Circle({ 
      radius:5, strokeWidth:2, 
      fill:'red', stroke:'black', 
      draggable:false 
     })); 

     this.getX = function() { 
     }; 
     this.getY = function() { 
     }; 
     this.getPosition = function() { 
      return { 
       x:this.getX(), y:this.getY() 
      } 
     } 

     ns.Point.distance = function (p1, p2) { // some code } 

     ns.MidPoint = function (params) { // some code }  
}; 

1)第一点,我没有在上面的代码知道是第一行声明:

Helper.using('py.Figures' , function (ns) {... }); 

本文档中的许多文件中使用这种结构。在这个文档中,有一个文件名为Helper,但是当我在这个文档中搜索时,我没有看到像py.Figures(通过使用Control + F)之类的东西。那么,它真的指向了什么?

上面的代码看起来像一个函数,那么function(ns)是什么意思,它看起来像参数,但我不这么认为。

2)第二点,我不知道的是:

ns.Pointns.Point.distancens.MidPoint样子了methodA。所以,function(ns)是一类,对不对?如果ns.Point是一种方法,为什么在这种方法中,还有其他方法,如getXgetY,这让我觉得那些看起来像一个类。

很抱歉,如果我的问题是愚蠢的,但是这个代码看起来怪我,我没有看到任何familar一些语言,我已经学会(Java,C#),或其他脚本语言太(Python)的

谢谢。

回答

2

1)function (ns) {... }确实是一种说法。该函数被解析,并且指向函数的指针被传递给函数Helper.using。你不会在Java中看到这些东西,但我认为这是Javascript的真棒之一。

这是定义回调的常用方法,而且参数函数看起来确实是一个回调。

2)不,ns是一个类对象,或更好的,一般是Object。它不需要成为一个类的实例。然后回调函数定义对象ns上的方法Point。在该方法的主体中,它定义(或可能重新定义)方法getX,getYgetPosition,因为this引用对象ns

第二次看,ns.Point确实是一个函数,但它可以作为类定义,所以在代码的其他部分,您可能会注意到类似new ns.Point(...)。这就是“类”在Javascript中的工作方式。

+0

名称'ns'表明这被用作*名称空间*。这可能会将新的方法'Point','Point.distance'和'MidPoint'添加到作为“py.Figures”命名空间的对象中。 – DCoder 2012-07-28 09:20:47

+0

@DCoder我想是这样,但它确实可以是任何东西。 'Helper.using'可以是某种类/对象扩展器,将第一个参数考虑在内并扩展它(这可能表明'eval'被用在某处......呃)。 – MaxArt 2012-07-28 09:27:04

+0

@MaxArt你能告诉我'ns.Point'和'this.getX()'之间的区别吗,因为如你所说,它既定义了对象'ns'的方法?谢谢:) – hqt 2012-07-28 09:28:42

0

如果你是一个新手,并没有关于复杂的结构和模式的想法。在进一步学习之前,你必须先学习这个概念,这样当你遇到一个奇怪的表达式时,你不会被混淆或混淆。下面是一个非常好的和精确的教程为你:http://www.youtube.com/watch?v=gLVmkhLnxwM

我可能没有向你解释你的代码,但我相信我发送的视频将真正帮助。

相关问题