未在Javascript函数中更新变量
我正在写一些Javascript项目,在变量更新方面有一些问题。我有这样一个功能:未在Javascript函数中更新变量,javascript,oop,Javascript,Oop,我正在写一些Javascript项目,在变量更新方面有一些问题。我有这样一个功能: function Bullet(top){ this.top = top; update(); function update(){ this.top -= 5; console.log(this.top) setTimeout(update, 50); } };
function Bullet(top){
this.top = top;
update();
function update(){
this.top -= 5;
console.log(this.top)
setTimeout(update, 50);
}
};
Bullet.prototype.getTop = function(){
return this.top;
};
当我打电话时:
var bullet = new Bullet(300);
我得到了300的连续控制台输出。当然,当我反复调用bullet.getTop()时,也会得到结果300 现在,我的问题是:为什么会发生这种情况?如何修复它?函数“update”中的“this”绑定到“update function”上下文,而不是“Bullet function”上下文。因此,当您在函数中使用“this”时,它与包装函数无关,并且当您进行更改时,它仅适用于使用“this”的函数的本地上下文。你可以阅读更多关于“这个” 你可以用两种方法解决这个问题 第一个是调用.bind(context)函数,只返回已调用函数的副本,但该副本绑定到传递的上下文。但是当您使用这种方法时,您必须在函数定义之后调用它
this.top = top
var update = function(){
this.top -= 5;
console.log(this.top)
setTimeout(update, 50);
}.bind(this)
update();
或
使用像bellow这样的JavaScript闭包,您可以定义一个闭包来调用它,让我们说“that”并在其中保存包装器上下文,然后在update函数中使用“that”
var that = this;
function update(){
that.top -= 5;
console.log(that.top)
setTimeout(update, 50);
}
此
不是您所认为的,请参见更新
内部,此
是窗口,因为没有给定上下文。最好使用this.update=function(){…};这个.update()代码>或更新调用(此)代码>“连续控制台输出300”这是怎么回事<代码>窗口。top
是一个对象,您应该在窗口
(或[对象窗口]
)中获得属性列表