2012-07-28 77 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

我可能沒有向你解釋你的代碼,但我相信我發送的視頻將真正幫助。