Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自原型自执行方法的方法调用_Javascript_Prototype_Self Executing Function - Fatal编程技术网

Javascript 来自原型自执行方法的方法调用

Javascript 来自原型自执行方法的方法调用,javascript,prototype,self-executing-function,Javascript,Prototype,Self Executing Function,我试图真正了解原型在js中的工作原理。我目前正在做一个基于循环的小游戏项目 我希望有一个游戏对象实例,一旦实例化就会自动启动,调用它定义的循环方法 我想得到的是这样的东西: function Game() {}; Game.prototype = { start: (function() { this.loop(); // this is where i have a problem })() loop: function() {

我试图真正了解原型在js中的工作原理。我目前正在做一个基于循环的小游戏项目

我希望有一个游戏对象实例,一旦实例化就会自动启动,调用它定义的循环方法

我想得到的是这样的东西:

function Game() {};
Game.prototype = {
    start: (function() {
        this.loop();    // this is where i have a problem
    })()

    loop: function() {
        // do stuff
    }
}
现在,很明显,这不起作用,因为我在start周围使用了一个自动执行函数来让它自动启动,所以'this'关键字代表窗口对象,而不是游戏对象

有没有什么方法可以做到这一点,这样我就不必在实例化一个新的游戏对象后手动调用start方法


谢谢

好的,我就是这么想的。但这让我有些困扰,因为我认为这可能不是编写代码的好方法。我想它终究不会那么糟糕。谢谢我不确定你认为什么是编写代码的正确方式,你期望什么?我不知道。我想这是因为我们首先声明了一个对象,它必须调用一个方法循环,而这个方法循环甚至还没有在同一个指令块中定义。它是一个函数,因此它在被调用之前不会被执行。Javascript解释器将在原型链中查找循环成员,直到找到它(或不找到)。这个/原型一开始理解起来有点复杂,因为this关键字和javathis无关。
function Game() { this.loop(); };
Game.prototype={ 

    loop: function() {
        // do stuff
    }
}

new Game;