2014-12-19 182 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

相关问题