JavaScript 对象中的变量和函数作用域
variable and function scope inside javascript object
我正在尝试建立一个超级原始的提示函数。基本上需要重复一个操作n次。
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();
输出返回索引值的"未定义"。我试图弄清楚为什么"this"在除监视器之外为该对象定义的所有方法中的行为是可预测的。JS中的范围仍然有点不稳定。
当你调用一个函数作为functionName()
,而不是作为某个对象的方法,如object.functionName()
,它的this
值将默认为严格模式下undefined
,全局对象在"草率模式"下
这里有两个选项:
在将函数传递到方法之前,将函数绑定到 this
:
this.eachIteration(this.monitor.bind(this));
或者,如果您希望 eachIteration
中的回调始终将当前this
作为其this
值,则可以使用回调的 .call()
方法:
callback.call(this);
<小时 />另一个问题是index
是init
方法中的一个局部变量,一旦init()
完成执行,它就会消失。如果希望对象具有index
属性,请使其成为属性:
var serialCue = {
index: 0,
init:function(length_of_cue, handler){
.....
相关文章:
- Javascript中的内部函数作用域
- 将对象作为参数传递时的 Javascript 函数作用域
- Javascript 函数作用域概念
- 函数作用域 if 语句
- Javascript 函数作用域
- 评估和函数作用域
- 有没有办法迭代函数作用域内的公共方法
- Javascript 函数作用域差异
- 嵌套函数作用域变量
- JavaScript 对象中的变量和函数作用域
- Javascript 函数作用域和查找父对象的属性
- 脚本标记之间的 JavaScript 函数作用域
- 纯JavaScript onclick在分配函数作用域结束后变为未定义
- 具有闭包函数作用域的意外行为
- KnockoutJS:函数作用域错误
- 具有所选函数作用域的变量
- 使用 JSON 对 js 对象进行分级/解析时,返回的方法中的函数作用域会丢失
- Angular的watch - update变量在函数作用域之外
- 将变量传递到函数作用域
- 为什么条件块中的函数声明在Chrome中提升到函数作用域,而在Firefox中不是?