Javascript 为什么回调是未定义的?
您好,我正在使用对象构造函数来管理一些动画,在某些情况下,我希望在动画完成时传递回调以显示其他元素。问题是如果在if语句外我记录了一种回调类型,这是一个有效的函数,但是当我在if语句内记录if时,if总是未定义的,我很感激有人能帮我,我也留下了代码片段,这样你们就可以检查它了Javascript 为什么回调是未定义的?,javascript,jquery,oop,constructor,callback,Javascript,Jquery,Oop,Constructor,Callback,您好,我正在使用对象构造函数来管理一些动画,在某些情况下,我希望在动画完成时传递回调以显示其他元素。问题是如果在if语句外我记录了一种回调类型,这是一个有效的函数,但是当我在if语句内记录if时,if总是未定义的,我很感激有人能帮我,我也留下了代码片段,这样你们就可以检查它了 // CONSTRUCTOR WHO MANAGE THE ANIMATIONS FOR THE WEBSITE function SpriteAnimation(frameWidth, spriteWidth, spr
// CONSTRUCTOR WHO MANAGE THE ANIMATIONS FOR THE WEBSITE
function SpriteAnimation(frameWidth, spriteWidth, spriteElement, shouldLoop, frameRate){
this.frameWidth = frameWidth;
this.spriteWidth = spriteWidth;
this.selector = document.getElementById(spriteElement);
this.shouldLoop = shouldLoop ;
this.curPx = 0;
this.frameRate = frameRate;
}
SpriteAnimation.prototype.start = function(callback){
this.selector.style.backgroundPosition = "-" + this.curPx + "px 0px";
this.curPx += this.frameWidth;
if (this.curPx < (this.spriteWidth - this.frameWidth)){
setTimeout(this.start.bind(this), this.frameRate);
}else if (this.curPx > (this.spriteWidth - this.frameWidth)){
console.log(typeof callback);
}else if(this.shouldLoop){
this.curPx = 0;
this.start();
}
};
您没有在
设置超时中传递回调,我建议您这样做:
setTimeout(function(){
this.start(callback);
}, this.frameRate);
您没有在设置超时中传递回调,我建议您这样做:
setTimeout(function(){
this.start(callback);
}, this.frameRate);
您没有在设置超时中传递回调,我建议您这样做:
setTimeout(function(){
this.start(callback);
}, this.frameRate);
您没有在设置超时中传递回调,我建议您这样做:
setTimeout(function(){
this.start(callback);
}, this.frameRate);
一种可能性是setTimeout调用start函数
SpriteAnimation.prototype.start = function(callback){
this.selector.style.backgroundPosition = "-" + this.curPx + "px 0px";
this.curPx += this.frameWidth;
if (this.curPx < (this.spriteWidth - this.frameWidth)){
setTimeout((function(){
this.start(callback)
}).bind(this), this.frameRate);
}else if (this.curPx > (this.spriteWidth - this.frameWidth)){
console.log(typeof callback);
}else if(this.shouldLoop){
this.curPx = 0;
this.start();
}
};
SpriteAnimation.prototype.start=函数(回调){
this.selector.style.backgroundPosition=“-”+this.curPx+“px 0px”;
this.curPx+=this.frameWidth;
if(this.curPx<(this.spriteWidth-this.frameWidth)){
setTimeout((函数(){
this.start(回调)
}).bind(this),this.frameRate);
}else if(this.curPx>(this.spriteWidth-this.frameWidth)){
console.log(回调类型);
}else if(this.shouldLoop){
这个.curPx=0;
这个。start();
}
};
一种可能性是setTimeout调用start函数
SpriteAnimation.prototype.start = function(callback){
this.selector.style.backgroundPosition = "-" + this.curPx + "px 0px";
this.curPx += this.frameWidth;
if (this.curPx < (this.spriteWidth - this.frameWidth)){
setTimeout((function(){
this.start(callback)
}).bind(this), this.frameRate);
}else if (this.curPx > (this.spriteWidth - this.frameWidth)){
console.log(typeof callback);
}else if(this.shouldLoop){
this.curPx = 0;
this.start();
}
};
SpriteAnimation.prototype.start=函数(回调){
this.selector.style.backgroundPosition=“-”+this.curPx+“px 0px”;
this.curPx+=this.frameWidth;
if(this.curPx<(this.spriteWidth-this.frameWidth)){
setTimeout((函数(){
this.start(回调)
}).bind(this),this.frameRate);
}else if(this.curPx>(this.spriteWidth-this.frameWidth)){
console.log(回调类型);
}else if(this.shouldLoop){
这个.curPx=0;
这个。start();
}
};
一种可能性是setTimeout调用start函数
SpriteAnimation.prototype.start = function(callback){
this.selector.style.backgroundPosition = "-" + this.curPx + "px 0px";
this.curPx += this.frameWidth;
if (this.curPx < (this.spriteWidth - this.frameWidth)){
setTimeout((function(){
this.start(callback)
}).bind(this), this.frameRate);
}else if (this.curPx > (this.spriteWidth - this.frameWidth)){
console.log(typeof callback);
}else if(this.shouldLoop){
this.curPx = 0;
this.start();
}
};
SpriteAnimation.prototype.start=函数(回调){
this.selector.style.backgroundPosition=“-”+this.curPx+“px 0px”;
this.curPx+=this.frameWidth;
if(this.curPx<(this.spriteWidth-this.frameWidth)){
setTimeout((函数(){
this.start(回调)
}).bind(this),this.frameRate);
}else if(this.curPx>(this.spriteWidth-this.frameWidth)){
console.log(回调类型);
}else if(this.shouldLoop){
这个.curPx=0;
这个。start();
}
};
一种可能性是setTimeout调用start函数
SpriteAnimation.prototype.start = function(callback){
this.selector.style.backgroundPosition = "-" + this.curPx + "px 0px";
this.curPx += this.frameWidth;
if (this.curPx < (this.spriteWidth - this.frameWidth)){
setTimeout((function(){
this.start(callback)
}).bind(this), this.frameRate);
}else if (this.curPx > (this.spriteWidth - this.frameWidth)){
console.log(typeof callback);
}else if(this.shouldLoop){
this.curPx = 0;
this.start();
}
};
SpriteAnimation.prototype.start=函数(回调){
this.selector.style.backgroundPosition=“-”+this.curPx+“px 0px”;
this.curPx+=this.frameWidth;
if(this.curPx<(this.spriteWidth-this.frameWidth)){
setTimeout((函数(){
this.start(回调)
}).bind(this),this.frameRate);
}else if(this.curPx>(this.spriteWidth-this.frameWidth)){
console.log(回调类型);
}else if(this.shouldLoop){
这个.curPx=0;
这个。start();
}
};
我想知道为什么在de setTimeout中将函数包装在()中……这个答案对我来说非常有效,只是想了解things@JhonnatanGonzalezRodriguez因为我想在setTimeout
处理程序上调用bind(this)
。。。所以只要把它包在()
里面就行了。但是我建议使用$.proxy()
而不是.bind()
,因为旧的浏览器兼容性问题使用$.proxy()
像设置超时($.proxy(函数(){this.start(回调);},this),this.frameRate)代码>函数()使该函数成为一个自执行函数?…对不起,英语不是我的母语lenguagemm不知道你可以用java脚本包装这样的东西,你有没有资源让我可以读一读它?…也感谢你的帮助和耐心我想知道为什么在de setTimeout中你将函数包装在()中…这个答案对我来说非常有效,我只是想了解things@JhonnatanGonzalezRodriguez因为我想在setTimeout
处理程序上调用bind(this)
。。。所以只要把它包在()
里面就行了。但是我建议使用$.proxy()
而不是.bind()
,因为旧的浏览器兼容性问题使用$.proxy()
像设置超时($.proxy(函数(){this.start(回调);},this),this.frameRate)代码>函数()使该函数成为一个自执行函数?…对不起,英语不是我的母语lenguagemm不知道你可以用java脚本包装这样的东西,你有没有资源让我可以读一读它?…也感谢你的帮助和耐心我想知道为什么在de setTimeout中你将函数包装在()中…这个答案对我来说非常有效,我只是想了解things@JhonnatanGonzalezRodriguez因为我想在setTimeout
处理程序上调用bind(this)
。。。所以只要把它包在()
里面就行了。但是我建议使用$.proxy()
而不是.bind()
,因为旧的浏览器兼容性问题使用$.proxy()
像设置超时($.proxy(函数(){this.start(回调);},this),this.frameRate)代码>函数()使该函数成为一个自执行函数?…对不起,英语不是我的母语lenguagemm不知道你可以用java脚本包装这样的东西,你有没有资源让我可以读一读它?…也感谢你的帮助和耐心我想知道为什么在de setTimeout中你将函数包装在()中…这个答案对我来说非常有效,我只是想了解things@JhonnatanGonzalezRodriguez因为我