可以帮我找到代码中的错误吗?我需要将一种方法的范围传递给另一种方法。
var obj = {
doIt: function() {
var a = 10;
this.doThat.call(this);
},
doThat: function() {
console.log(a);
}
};
obj.doIt();
答案 0 :(得分:1)
如果要在上下文范围内访问a
,可以尝试此操作。
var obj = {
doIt: function() {
this.a = 10;
this.doThat.call(this);
},
doThat: function() {
console.log(this.a);
}
};
obj.doIt();
答案 1 :(得分:1)
您要做来回传递“上下文”(又名this
)。 a
不过不是当前上下文的一部分,而是当前范围的一部分。因此,您可以将a
移至上下文中:
var obj = {
doIt: function() {
this.a = 10;
this.doThat();
},
doThat: function() {
console.log(this.a);
}
};
或者您将a
的值直接传递给doThat:
//...
this.doThat(a);
doThat(a) { /*...*/ }
答案 2 :(得分:0)
您需要了解context
和scope
之间存在差异。范围将决定某个特定站点可以访问哪些变量,而上下文是该站点或函数内部的值。
因此,如果要在函数a
中使用doThat
的值,则需要将a
的值与this
绑定,doIt
是函数this.a = 10;
的上下文例如:console.log(this.a)
,然后在函数doThat
内使用{{1}}访问它