gpt4 book ai didi

javascript - setInterval,这个,再一次

转载 作者:行者123 更新时间:2023-12-02 16:40:19 25 4
gpt4 key购买 nike

我有关于 setInterval 的问题我无法弄清楚。

调用setInterval时作用域有问题或对象内超时,但我仍然无法理解它。

我试图将我的东西放入匿名函数中,但它不起作用。

这基本上是我的问题,简化为最基本的:

function Scenario(){
var ships = [];
this.ini = function(){
for (var i = 0; i < ships.length; i++){
timeoutID1 = setTimeout(ships[i].ding, 1000);
timeoutID2 = setTimeout(ships[i].bing, 1000);
}
}
this.setShips = function(){
var ship = new Ship("ship");
ships.push(ship);
}

function Ship(name){
this.name = name;
this.ding = function(){
intervalID1 = setInterval(function(){
console.log("ding");
}, 500)
}
this.bing = function(){
var _this = this;
intervalID2 = setInterval(function(){
console.log(_this.name);
}, 500)
}
}
this.setShips();
}

var scenario = new Scenario();
scenario.ini();

http://jsfiddle.net/ancientsion/xkwsn7xd/

基本上,console.log("ding")作品,console.log(_this.name)没有。

为什么?

最佳答案

这是您的简单问题:

var ship = {
name: 'Sheep',
ding: function() {
console.log(this.name);
}
}

setTimeout(ship.ding, 1000); // doesn't work correctly

查看另一个示例可能有助于理解为什么上述方法不起作用:

var ding = ship.ding;
ding(); // doesn't work either

在 JavaScript 中,this 取决于您如何调用函数。 ship.ding() 会将 this 设置为 sheep 对象。纯粹的 ding() 调用会将 this 设置为 window 对象。

您可以使用.bind()方法将函数绑定(bind)到您想要的对象。 (Function.prototype.bind())

var ding = ship.ding.bind(ship);
ding(); // works

ding 现在永久绑定(bind)到 sheep 对象。您可以对 setTimeout 使用完全相同的方法:

setTimeout(ship.ding.bind(ship), 1000);

关于javascript - setInterval,这个,再一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570546/

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