2009-07-07 67 views
8

我有一個JavaScript的命名空間說在javascript中調用另一種方法的方法?

A={ 

    CA: function() { 
    this.B(); 
    }, 
    B: function() { 
    var test='test'; 
    var result='t1'; 

    C: function() { 
     this.test='test1'; 
     ..... 
     ..... 
     return 'test1';  
    } 

    result=this.C(); 
    return result; 
    } 
} 

現在,當我執行這樣的代碼它給該類型錯誤:this.C不是一個函數。有人可以告訴我爲什麼是這樣。我知道這與詞彙範圍有關,但我無法理解這一點。

+0

對不起,我是新用戶併發布了第一個問題,不知道如何發佈問題。我現在要記住這一點。謝謝。 – 2009-07-07 14:48:59

回答

5

我認爲問題在於,當this.C()B稱爲函數內部執行,this是指包含B對象,即,對象A。 (這裏假定B()被稱爲的A範圍內)

問題是,C不對象A上存在,因爲它的內B定義。如果您想在B內撥打本地功能C(),只需使用C()即可。

編輯: 此外,我不確定你發佈的是有效的JavaScript。具體而言,B應該以這種方式定義,因爲您不能在函數中使用object:property語法。

B: function() 
{ 
    var test='test'; 
    var result='t1'; 

    var C = function() 
    { 
    this.test='test1'; 
    return 'test1';  
    } 

result=C(); 
return result; 
} 
+0

我認爲你是對的,我最後也做了同樣的方法(做了這個函數,並直接從外部函數中調用它),然後敲我的頭,使這個.C工作。 – 2009-07-07 14:39:08

4

我真的很驚訝你的代碼不會給'C:'行上的錯誤。

無論如何,你的語法來定義一個函數是不正確的。使用var關鍵字定義它。另請注意,我創建了'閉包',以便函數C可以訪問'this'。請參見下面的代碼:

A={ 

    CA: function() 
    { 
    this.B(); 
    }, 

    B: function() 
    { 
    var test='test'; 
    var result='t1'; 

    var self = this; 
    var C = function() 
      { 
       self.test='test1'; 
       ..... 
       ..... 
       return 'test1';  
      } 

    result=C(); 
    return result; 
    } 
} 

如果你想分配C到「這個」對象,你也可以這樣做:

A={ 

    CA: function() 
    { 
    this.B(); 
    }, 

    B: function() 
    { 
    var test='test'; 
    var result='t1'; 

    var self = this; 
    this.C = function() 
      { 
       self.test='test1'; 
       ..... 
       ..... 
       return 'test1';  
      }; 

    result= this.C(); 
    return result; 
    } 
} 
+0

您將無法使用'this',因爲'this'是一個關鍵字,您需要創建閉包。另外,因爲我將「self」定義爲局部變量,所以它不會影響全局對象。 – SolutionYogi 2009-07-07 14:33:23

+0

是啊對不起,我意識到我的愚蠢,因此刪除了我的評論:-(但是現在我同意你的回答。+1與我一起忍受:-) – 2009-07-07 14:34:26

21

你有當您使用這個找出什麼要小心在Javascript中,因爲每次更改範圍「this」都會改變。

將'this'引用賦給它自己的變量有助於解決這個問題。

var a = new function() { 
    var self = this; 

    self.method = function() { alert('hiya'); }; 

    var b = function() { 
     this.method(); // this isn't 'a' anymore? 
     self.method(); // but 'self' is still referring to 'a' 
    }; 

}; 
0

從另一種方法調用方法的解決方案。 (本質上,指針「本」必須被分配給代替此使用的變量和所述新的變量。)

function myfunction(){ 
    var me = this; 

    me.method1 = function(msg){ alert(msg); } 

    me.method2 = function(){ 
     me.method1("method1 called from method2"); 
    } 
} 

var f as new myfunction(); 
f.method2(); 

這個例子展示瞭如何可以從內的另一種方法或使用一個實例的外部調用的方法的功能。

相關問題