Javascript Can';t使用'调用方法;这';
我正在尝试调用我的方法Move();在对象MySnake中使用setInterval: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); //
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()
,否则它似乎可以工作?这非常有用!非常感谢。