2010-09-23 62 views
1

的代碼樣本位:Javascript和JQuery的「本」範圍的錯誤

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 

<div id="myinfo">info</div> 
<input id="clickme" type="button" value="click here to display info"/> 

<script type="text/javascript"> 
    function Fighter() { 
     this.name = "Kenny"; // fighters name 
     this.hp = 10;   // fighters hp 
     this.getHP = function() { 
      return this.hp; 
     } 

     this.getName = function() { 
      return this.name; 
     } 

     this.initUpdateButton = function(button_id) { 
      $(button_id).click(function() { 
       $("#myinfo").html("Name: "+this.getName()+"<br/>HP:"+this.getHP()); 
       // this.getName is undefined 
      }); 
     } 

    }; 

    var me = new Fighter(); 
    alert("Name: "+me.getName()+"<br/>HP:"+me.getHP()); // works properly 
    me.initUpdateButton("#clickme"); // bind it to some ID 
</script> 

簡單地說,給定一個JavaScript類使用jQuery混合,據我所知,在回調jQuery的功能(即$.click()this指的是被點擊的對象,而不是類或根函數()。所以this.getName()this.getHP()不起作用。

但是,解決這個問題的最好方法是什麼?

我看到一些類似的帖子,但他們對我沒有用,所以很抱歉,如果這是一個轉發和預先感謝。

+0

當你的屬性公開時,getter方法真的有用嗎? :) – 2010-09-23 02:57:57

+0

對,我的實際執行情況並不像我爲SO – 2010-09-23 03:34:47

回答

2
this.initUpdateButton = function(button_id) { 
      var self = this; 
      $(button_id).click(function() { 
       $("#myinfo").html("Name: "+self.getName()+"<br/>HP:"+self.getHP()); 
      }); 
     } 
+0

喔哇的例子那麼簡單。很簡單。一個明確的標誌,我應該在編碼之前多睡一下: - /謝謝! – 2010-09-23 01:05:00