2012-12-18 80 views
0

這裏面(公共)功能,我有以下的javascript:(JSFiddle調用私有函數

$(function() { 
    function Cat() 
    { 
     this.Meow = function (sound) { 
      alert("Meow: " + sound); 
     } 

     this.Kick = function() { 
      MakeNoise();  
     } 

     var MakeNoise = function() { 
      Meow("noise"); 
      //Cat.Meow("noise"); 
      //self.Meow("noise"); 
      //this.Meow("noise");      
     }   
    } 

    var c = new Cat(); 
    c.Kick(); 
});​ 

當我打電話Kick功能,我得到「喵沒有定義」的錯誤(與任何我在MakeNoise函數中嘗試了四件事)。

我也試過原型就像這樣,但是這給了我同樣的錯誤:

Cat.prototype.Meow = function (sound) { 
    return this.Meow(sound);  
} 

我一直相信這有一個非常簡單的解決方案,但我想不出如何成功地調用Meow功能「貓」級課程。我怎樣才能做到這一點?

另外,這個架構是否有任何意義呢?我的意圖是將KickMeow作爲公共職能,MakeNoise作爲私有。

+0

穆薩的回答就可以了,但是我鼓勵你看看下面的文章,有關「這個」和範圍更多的解釋。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/這個 – gerges

+0

@gerges感謝您的鏈接。我認爲(看起來不正確)這是指當前對象。 – Mansfield

回答

4

保存一個引用對象,以便您可以在MakeNoise函數中使用它。下面

$(function() { 
    function Cat() 
    { 
     var self = this; 
     this.Meow = function (sound) { 
      alert("Meow: " + sound); 
     } 

     this.Kick = function() { 
      MakeNoise();  
     } 

     var MakeNoise = function() { 
      //Meow("noise"); 
      //Cat.Meow("noise"); 
      self.Meow("noise"); 
      //this.Meow("noise");      
     }   
    } 

    var c = new Cat(); 
    c.Kick(); 
});​ 

http://jsfiddle.net/mowglisanu/7XEYD/3/

+0

優秀。非常感謝! – Mansfield