我对于我从react.js文档中获取的代码片段感到有些困惑: http://facebook.github.io/react/docs/reusable-components.html
但是我把它转换成了一般的js案例:
var SomeFunc = function(){
this.intervals = [];
this.setInterval = function(){
this.intervals.push(setInterval.apply(null, arguments));
};
var self = this;
this.cleanup = setTimeout(function(){
self.intervals.map(clearInterval);
}, 3000);
}
var someFunc = new someFunc();
someFunc.setInterval(this.tick, 1000);
someFunc.cleanup();
我对以下几行感到困惑:
this.intervals.push(setInterval.apply(null, arguments));
当我在console.log中调用push
的参数时,它会返回1
有人可以解释实际存储在这个数组中的内容吗?
清理工作,那么为什么数组显示数组索引号(+ 1?)而不是实际存储在数组中的数?
React.js jsfiddle:
http://jsfiddle.net/xsjfq5ex/2/
答案 0 :(得分:6)
setInterval
返回间隔ID,这是存储在数组中的内容:
重复调用函数或执行代码片段,每次调用该函数之间都有固定的时间延迟。返回intervalID。
intervalID是您可以传递给
clearInterval()
的唯一间隔ID。
答案 1 :(得分:2)
您正在构造函数为setInterval
的对象上创建名为SomeFunc
的属性。该属性是一个函数,它只是将创建间隔的任务委托给全局setInterval
,但也会跟踪它创建的间隔。
使用setInterval.apply(null, arguments)
,实质上是调用全局setInterval
,并将参数传递给它(这将是要执行的函数和以毫秒为单位的间隔)。 null
表示this
将在函数体内引用的内容。
setInterval()
将创建间隔并返回分配给该间隔的ID;此ID是您存储在数组中的ID。当您调用cleanup
时,您通过clearInterval
映射数组,map
接受要清除的间隔的ID(在这种情况下,通过app.navi.pushPage("searchResults");
app.navi.pushPage("postDetails"); //first instance
app.navi.pushPage("userProfile");
app.navi.pushPage("usersPosts");
app.navi.pushPage("postDetails"); //second instance with different init params...not initializing properly
的回调传递。 / p>
因此,简单来说,您正在创建一个中间层来存储间隔,就像它们被“分配”到您创建的对象一样。这使得它们在您完成时更容易清除。