2009-07-07 13 views
8

ŞimdiJavascript'te başka bir yöntemde arama yöntemi mi? Böyle kod yürütme ediyorum o TypeError veriyor ben bir JavaScript ad yaşıyorum

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; 
    } 
} 

ki: this.C bir işlev değil. Birisi bana neden böyle olduğunu söyleyebilir. Bildiğim kadarıyla sözlüksel bir şeyle ilgili bir şey biliyorum ama bunu anlayamıyorum.

+0

Üzgünüz, ben yeni bir kullanıcıyım ve ilk sorumu yayınladım, soruların nasıl yazılacağını bilmiyorum. Bunu şimdi aklımda tutacağım. Teşekkürler. –

cevap

5

Sorun this.C()B tarafından ifade işlev içinde yürütüldüğünde, this yani A amacıdır B içeren nesne anlamına gelir olduğunu düşünüyorum. Bu B içinde tanımlanan beri, C nesne A biri yok

sorun olan (bu B()A kapsamında adlandırılır kabul). B içinde C() yerel işlevini çağırmak isterseniz, C()'u kullanın.

DÜZENLEME: Ayrıca, yayınladığınız bilgilerin JavaScript olduğundan emin değilim. Spesifik olarak, B bu şekilde tanımlanmalıdır, çünkü nesneyi kullanamazsınız: bir fonksiyon içindeki özellik sözdizimi.

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

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

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

Bence doğru ve ben de aynı şekilde yaptım (bu fonksiyonu yaptı ve doğrudan dış fonksiyondan çağırdı). –

4

Aslında kodunuzun 'C:' satırında hata vermemesine şaşırdım. Her neyse, bir işlevi tanımlamak için sözdiziminiz doğru değil. Var anahtar kelimesini kullanarak tanımlayın. Ayrıca, 'kapanışı' yarattığımı, böylece C fonksiyonunun 'buna' erişebileceğine dikkat edin. Aşağıdaki kod bakın: 'Bu' nesneye C atamak isterseniz,

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; 
    } 
} 

da yapabilirsiniz:

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' kelimesini kullanamazsınız çünkü 'this' bir anahtar sözcüktür ve kapatmayı oluşturmanız gerekir. Ayrıca, 'ben'i' bir yerel değişken olarak tanımladığımdan, global nesneyi etkilemez. – SolutionYogi

+0

evet üzgünüm, aptallığımı fark ettim ve bu yüzden benim yorumumu sildim :-(Ama Evet şimdi cevabınıza katılıyorum. +1 benimle takıldığım için çok :-) –

21

Sen her şeyi tanımlamak için bu kullanırken dikkatli olmak zorunda Javascript'te, kapsamı her değiştirdiğinizde "bu" değişir.

'Bu' referansı kendi değişkenine atamak, bu konuyla ilgilenir.

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' 
    }; 

}; 
+1

var self = this; sadece aradığım şey! Teşekkür ederim! –

+0

Bu tam olarak ihtiyacım olan şey, çok teşekkür ederim. –

0

Başka bir yöntemden yöntemleri çağırmak için çözüm. (Işaretçi, "Bu", bu yerine kullanılan bir değişken ve yeni bir değişken atanmalıdır.)

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(); 

Bu örnek, bir dış, bir örneğini kullanarak bir yöntemi içinde ya da gelen bir yöntem çağırabilir gösterir fonksiyonun

İlgili konular