我正在尝试建立一个超级原始线索函数。基本上需要多次重复操作。
var serialCue = {
init:function(length_of_cue, handler){
this.length_of_cue = length_of_cue;
this.handler = handler;
//this.handler();
var index = 0;
},
monitor: function(){
console.log(this.index);
// this.handler();
// this.index++;
// if(this.index>=this.length_of_cue){
// this.handler();
// }
},
eachIteration: function(callback){
console.log("yo");
callback();
},
startProcessing: function(){
for(var count=0;count<this.length_of_cue;count++){
this.eachIteration(this.monitor);
}
}
}
module.exports = Object.create(serialCue);
//IN APP.JS
var cue = require('./serial_cue.js');
cue.init(5,function(){
console.log("done done and done!");
});
cue.startProcessing();
输出返回&#34;未定义&#34;对于索引的值。我想弄清楚为什么&#34;这个&#34;除了monitor之外,在为该对象定义的所有方法中都可预测。 JS中的范围仍然有些不稳定。
答案 0 :(得分:2)
当您将某个函数称为functionName()
时,而不是某个对象的方法,例如object.functionName()
,其this
值将在严格模式下默认为undefined
,和&#34;草率模式中的全局对象&#34;。
这里有两个选项:
在将函数传递给方法之前将函数绑定到this
:
this.eachIteration(this.monitor.bind(this));
或者,如果您希望eachIteration
中的回调始终将当前this
作为其this
值,则可以使用回调&#39; .call()
方法:
callback.call(this);
<小时/> 另一个问题是
index
是init
方法中的局部变量,只要init()
完成执行,它就会消失。如果您希望对象具有index
属性,请将其设为属性:
var serialCue = {
index: 0,
init:function(length_of_cue, handler){
.....