我正在尝试使用自定义推送方法扩展特定数组:
let instance = {
'queue': []
};
instance.initQueue = () => {
let _this = instance;
_this['queue'].push = func => {
if (typeof func === 'function') {
// default
Array.prototype.push.apply(this,arguments);
// process
_this.processQueue();
}
};
_this.processQueue();
};
instance.processQueue = () => {
let _this = instance;
_this['queue'].forEach((func,idx,obj) => {
if (typeof func === 'function') {
func.call(func);
}
obj.splice(idx,1);
});
};
instance.initQueue();
instance.queue.push(() => console.log(1))
当我尝试触发push方法(instance.queue.push(() => console.log(1));
时,什么也没有发生。如果我将initQueue
函数包装为超时,那么它就起作用了:
setTimeout(() => { instance.initQueue(); },100);
任何合理的解释为什么会发生这种情况?