2011-10-01 48 views
1

的功能在下面的代碼:的Javascript訪問同一類

function xyz(x) { 
      //something 
      this.x = x; 
     } 
     xyz.prototype = { 
      a: function() { 
       //do something 
      }, 
      b: function() { 
       //pre 
       this.a(); 
       //post 
      } 
     } 

this.a()呼叫給出method not supported警告。所以我嘗試使用xyz.prototype.a.call(this)來代替。但它不保留x的值。我該如何調用其他類的一種方法?

+0

當您遇到該錯誤時,您沒有顯示如何調用「b()」函數。 – Pointy

+0

這顯然代之以實際的代碼,對吧?不支持的方法是從Web服務器返回,如果它只有GET,並且您嘗試POST或其他不支持/實施的動詞 – Joe

+0

^沒有問題肯定不存在。 – mihsathe

回答

2

鑑於你的代碼,如果你寫:

var myXyz = new xyz("hello"); 

然後調用

myXyz.b(); 

應該正確地獲取到 「一個()」 的原型功能。但是,如果你做這樣的事情:

var otherB = myXyz.b; 

otherB(); 

那麼它將工作,因爲沒有上下文對象(也就是裏面的this值「b()」將無法正確設置爲「xyz」的實例)。當一個函數被用作事件處理程序,經常發生:

something.onclick = myXyz.b; 

事件處理程序,調用的時候,會不會有一個「XYZ」實例一起工作。因此,你可以這樣寫:

something.onclick = function() { myXyz.b(); }; 

它清楚地確保有一個「xyz」對象。