JavaScript原型函数不能从构造对象中获得

时间:2013-02-21 06:10:15

标签: javascript oop prototypejs

对于下面的代码,我在GameStatsPanel函数的第二行收到以下错误:

  

“Uncaught TypeError:Object #Timer没有方法'start'”

我真的很困惑为什么会发生这种情况 - 我有一种感觉,我在某处失去了一些简单的东西,但我需要开悟。请访问www.letsplayglobalgames.com并选择“播放!”,随时查看问题。主页上的选项。如果您需要更多详细信息,请与我们联系。

function GameStatsPanel() {
    this.timer = new Timer();
    this.timer.start(); /* error is thrown here */
}
function Timer() {
    this.container = document.getElementById('game_time');
    this.current_flag_time_start;
    this.current_flag_time_stop;
    this.time_start = new Date();
    this.time_stop;
    this.time_difference;
    this.current_flag_time_difference;
}
Timer.prototype.start = function() {
    this.current_flag_time_start = new Date();
}

1 个答案:

答案 0 :(得分:3)

Timer有机会使用您的方法进行设置之前,您正在调用Timer.prototype构造函数。

Timer函数可用,因为函数声明是“已提升”,因此可立即使用。

Timer.prototype的扩展程序未被“悬挂”,因此当Timer .prototype时,new Timer有一个未经修改的gameStatsPanel = new GameStatsPanel(); // Invoking this too soon. Put it and // ... // anything else that uses the constructors at // the bottom so the prototypes can be set up. function main() { // ... } function GameStatsPanel() { this.timer = new Timer(); // The `Timer.prototype` extensions haven't run yet // ... this.timer.start(); // .start doesn't yet exist } // ... function Timer() { // ... } // ... // *Now* the .start() method is getting added. Timer.prototype.start = function () { this.current_flag_time_start = new Date(); } // ...

{{1}}