2014-12-19 184 views
-1

我正在嘗試JavaScript中的OOP。javascript:如何在原型函數中調用另一個函數

var UiElementManagerClass = function() { 
... }; 

    UiElementManagerClass.prototype = { 
... 
     OnTabStripSelected : function (sender, args) { 
      switch (args.get_tab().get_index()) { 
       case 1: 
... 
        var newdata = this.InitData(); // <- this here 
... 
        break; 

       default: 
... 
        break; 
      } 
     }, 
... }; 
... 
    var UiMgrCustCtgyList = null; 

    $(document).ready(function() { 

     UiMgrCustCtgyList = new UiElementManagerClass(); 
... 
     UiMgrCustCtgyList.InitData = function() { 
      return DataClass.create(); 
     }; 

在運行時,OnTabStripSelected(),我想調用InitData(),但它拋出EXP,這是不確定的。

+5

'this.AbstractMtd2()'? – Sirko 2014-12-19 11:18:58

+0

把這個。 - > 對象不支持屬性或方法'AbstractMtd2' – Kelmen 2014-12-19 11:21:30

+3

您的「嘗試」令人困惑。也許你可以解釋你想要達到的目標以及你如何考慮實現它(也許是一些啓發你的鏈接)? – Tibos 2014-12-19 11:22:00

回答

1

你的代碼是完全地打破,你想設置的MyClass.prototype東西,從MyBaseClass調用它....我已經改寫了代碼:

http://jsfiddle.net/5h3yavru/

var MyBaseClass = function(){}; 

MyBaseClass.prototype = { 
    Mtd1: function(){ 
     this.AbstractMtd2(); 
    }, 
    AbstractMtd2: function(){ 
     alert('original abstractMtd2'); 
    } 
} 

var subClass = new MyBaseClass(); 
subClass.AbstractMtd2 = function() { 
    alert('overwriting abstractMtd2'); 
} 
+0

更改爲你的格式,仍然是同樣的錯誤。我追加在子類代碼中。 – Kelmen 2014-12-19 11:49:23

+0

是甚麼定義的UiMgrCustCtgyList.InitData?也許這就是爲什麼它拋出未定義的錯誤。您發佈的代碼不會在原型對象中顯示InitData方法。如果它不在OnTabStripSelected中,那麼你不能調用它。 – 2014-12-19 11:51:02

0

的鏈接我的評論解釋了這個值以及如何傳遞閉包或綁定函數。我的猜測是這似乎是問題所在。既然你沒有發佈如何調用函數,我必須給它最好的猜測。

如果您使用chrome,我建議您嘗試記錄一些您感興趣的變量。在控制檯選項卡中的開發人員工具中,您可以看到它們的值。例如:

console.log(this); 

Prototypical inheritance - writing up

相關問題