gpt4 book ai didi

javascript - 无法使用 'this' 调用方法

转载 作者:行者123 更新时间:2023-11-28 19:43:09 25 4
gpt4 key购买 nike

我正在尝试调用我的方法 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

这是一个工作 jsfiddle 。在您的示例中,内部 this 是全局窗口

<小时/>

另一种解决方案是将函数中的 this 绑定(bind)到本地 this,如本 second jsfiddle 所示。 :

function Snake()
{
this.Move = function() { document.body.innerHTML += '.'; };

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

但是这个更难读。

关于javascript - 无法使用 'this' 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24711946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com