Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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 Can';t使用'调用方法;这';_Javascript_Methods_This - Fatal编程技术网

Javascript Can';t使用'调用方法;这';

Javascript Can';t使用'调用方法;这';,javascript,methods,this,Javascript,Methods,This,我正在尝试调用我的方法Move();在对象MySnake中使用setInterval: function Snake() { this.Start = function(Speed) { this.Movement = setInterval(function(){ this.Move(); },Speed); } } var MySnake = new Snake(); MySnake.Start(400); //

我正在尝试调用我的方法Move();在对象MySnake中使用setInterval:

function Snake()
{
    this.Start = function(Speed)
    {
        this.Movement = setInterval(function(){
            this.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Doesn't work
这不管用。但当我通过实例“MySnake”调用该方法时:

function Snake() 
{
    MySnake.Start = function(Speed)
    {
        this.Movement = setInterval(function(){
            MySnake.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Works

我不想让带有“this”关键字的那一个起作用,这是因为
this
是由调用方在JavaScript中定义的。最简单的解决方案是将其存储在另一个变量中:

function Snake()
{

    this.Start = function(Speed)
    {
        var that = this;
        this.Movement = setInterval(function(){
            that.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Work
这是一张工作票。在您的示例中,内部
this
是全局
窗口


另一种解决方案是将函数中的
this
绑定到本地
this
,如下所示:


但是这个更难读。

这是因为
这个
是由调用程序在JavaScript中定义的。最简单的解决方案是将其存储在另一个变量中:

function Snake()
{

    this.Start = function(Speed)
    {
        var that = this;
        this.Movement = setInterval(function(){
            that.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Work
这是一张工作票。在您的示例中,内部
this
是全局
窗口


另一种解决方案是将函数中的
this
绑定到本地
this
,如下所示:


但是这个更难读。

这是因为
这个
是由调用程序在JavaScript中定义的。最简单的解决方案是将其存储在另一个变量中:

function Snake()
{

    this.Start = function(Speed)
    {
        var that = this;
        this.Movement = setInterval(function(){
            that.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Work
这是一张工作票。在您的示例中,内部
this
是全局
窗口


另一种解决方案是将函数中的
this
绑定到本地
this
,如下所示:


但是这个更难读。

这是因为
这个
是由调用程序在JavaScript中定义的。最简单的解决方案是将其存储在另一个变量中:

function Snake()
{

    this.Start = function(Speed)
    {
        var that = this;
        this.Movement = setInterval(function(){
            that.Move();
        },Speed);
    }
}
var MySnake = new Snake();
MySnake.Start(400); //Work
这是一张工作票。在您的示例中,内部
this
是全局
窗口


另一种解决方案是将函数中的
this
绑定到本地
this
,如下所示:

但是这一个更难读。

当你这样做的时候。move();“this”在传入setInterval方法的匿名函数中,因此您将得到一个错误

function Snake()
{

    this.Start = function(Speed)
    {
        var _this = this;
        this.Movement = setInterval(function(){
            _this.Move();
        },Speed);
    }
}
var MySnake=newsnake()

MySnake.Start(400)

这将起作用,因为对对象的引用是由setInterval回调创建的闭包捕获的。

执行此操作时。move();“this”在传入setInterval方法的匿名函数中,因此您将得到一个错误

function Snake()
{

    this.Start = function(Speed)
    {
        var _this = this;
        this.Movement = setInterval(function(){
            _this.Move();
        },Speed);
    }
}
var MySnake=newsnake()

MySnake.Start(400)

这将起作用,因为对对象的引用是由setInterval回调创建的闭包捕获的。

执行此操作时。move();“this”在传入setInterval方法的匿名函数中,因此您将得到一个错误

function Snake()
{

    this.Start = function(Speed)
    {
        var _this = this;
        this.Movement = setInterval(function(){
            _this.Move();
        },Speed);
    }
}
var MySnake=newsnake()

MySnake.Start(400)

这将起作用,因为对对象的引用是由setInterval回调创建的闭包捕获的。

执行此操作时。move();“this”在传入setInterval方法的匿名函数中,因此您将得到一个错误

function Snake()
{

    this.Start = function(Speed)
    {
        var _this = this;
        this.Movement = setInterval(function(){
            _this.Move();
        },Speed);
    }
}
var MySnake=newsnake()

MySnake.Start(400)


这将起作用,因为对对象的引用是由setInterval回调创建的闭包捕获的。

注意,在interval回调中,
这个
很可能就是窗口,所以您尝试调用
window.Move()
,否则它似乎会起作用?这非常有用!非常感谢。请注意,在间隔回调中,
很可能是窗口,因此您尝试调用
window.Move()
,否则它似乎可以工作?这非常有用!非常感谢。请注意,在间隔回调中,
很可能是窗口,因此您尝试调用
window.Move()
,否则它似乎可以工作?这非常有用!非常感谢。请注意,在间隔回调中,
很可能是窗口,因此您尝试调用
window.Move()
,否则它似乎可以工作?这非常有用!非常感谢。