Javascript 类型错误:';requestAnimationFrame';在未实现接口窗口的对象上调用

Javascript 类型错误:';requestAnimationFrame';在未实现接口窗口的对象上调用,javascript,Javascript,我正在将我的setInterval代码转换为requestAnimationFrame。我在类中使用它,所以我需要将这个绑定到传递的函数 当我将正确的供应商函数分配给变量(this.raf)时,我得到了错误: TypeError:对不存在的对象调用了“requestAnimationFrame” 实现接口窗口 当我直接调用window.requestAnimationFrame时,代码运行良好。你知道为什么会出错吗 这是 slideshow=(函数(){ 函数幻灯片(){ this.slideS

我正在将我的
setInterval
代码转换为
requestAnimationFrame
。我在类中使用它,所以我需要将
这个
绑定到传递的函数

当我将正确的供应商函数分配给变量(
this.raf
)时,我得到了错误:

TypeError:对不存在的对象调用了“requestAnimationFrame” 实现接口窗口

当我直接调用
window.requestAnimationFrame
时,代码运行良好。你知道为什么会出错吗

这是

slideshow=(函数(){
函数幻灯片(){
this.slideShowRunning=false;
这个幻灯片=0;
}
slideshow.prototype.startSlideshow=函数(){
var newSlide;
this.slideShowRunning=true;
这是rafId;
this.raf=window.requestAnimationFrame||
window.mozRequestAnimationFrame||
window.webkitRequestAnimationFrame||
window.msRequestAnimationFrame||
window.oRequestAnimationFrame;
函数循环(){
//如果fn返回false,则停止循环
if(this.slideShowRunning!==false){
如果(this.slide
为什么要将其分配给此?只需设置
var-raf=(在IIFE的范围内)并调用
raf(boundLoop)。无论如何,问题是因为调用函数时设置了运行时使用的
this
x.raf()
函数中的
this
设置为
x
requestAnimationFrame
不希望它的
是您的对象。另外,
this.rafId不做任何陈述。@Ryan-你的解释正是我所期望的。你的解决方案太简单了。幸运的是,没有理由将其设置为类变量。感谢您的快速回答和解决方案。
slideshow = (function() {
  function slideshow() {
    this.slideShowRunning = false;
    this.slide = 0;
  }

  slideshow.prototype.startSlideshow = function() {
    var newSlide;
    this.slideShowRunning = true;
    this.rafId;
    this.raf = window.requestAnimationFrame ||
      window.mozRequestAnimationFrame ||
      window.webkitRequestAnimationFrame ||
      window.msRequestAnimationFrame ||
      window.oRequestAnimationFrame;

    function loop() {
      // stop the loop if fn returned false
      if (this.slideShowRunning !== false) {
        if (this.slide < this.count - 1) {
          newSlide = this.slide + 1;
        }
        this.loadSlide(newSlide);
        // loop until cancelled
        var boundLoop = loop.bind(this);

        // THIS GIVES THE ERROR
        this.rafId = this.raf(boundLoop);

        // BUT THIS WORKS
        //this.rafId = window.requestAnimationFrame(boundLoop);
      }
    }
    var boundLoop = loop.bind(this);
    boundLoop();
  }

  slideshow.prototype.loadSlide = function(slideNumber) {
    // loading the slide
    console.log(slideNumber);
  }

  return slideshow;

})();

ss = new slideshow();
divStart = document.getElementById("start");
divStart.onclick = function() {
  ss.startSlideshow()
};