Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么回调是未定义的?_Javascript_Jquery_Oop_Constructor_Callback - Fatal编程技术网

Javascript 为什么回调是未定义的?

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

您好,我正在使用对象构造函数来管理一些动画,在某些情况下,我希望在动画完成时传递回调以显示其他元素。问题是如果在if语句外我记录了一种回调类型,这是一个有效的函数,但是当我在if语句内记录if时,if总是未定义的,我很感激有人能帮我,我也留下了代码片段,这样你们就可以检查它了

// 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因为我