两个上下文中this
的值是多少,一个嵌套函数如何引用另一个函数的返回值?
var rootObj = {
nestedObjA: {
functionA: function() {
// what is value of 'this' here?
return 'foo';
}
},
nestedObjB: {
functionB: function() {
// how to reference? >> rootObj.nestedObjA.functionA
// what is the value of 'this' here?
}
}
}
答案 0 :(得分:1)
对于“函数内部this
的值是多少?”没有保证答案,因为您可以使用函数原型的apply()
/ call()
方法进行设置
var rootObj = {
nestedObjA: {
functionA: function() {
var foo = "bar";
return foo;
}
},
nestedObjB: {
functionB: function() {
var foo = this.nestedObjA.functionA();
console.log(foo);
}
}
}
// When calling functionB() you could use:
rootObj.nestedObjB.functionB.apply(rootObj);
默认情况下,this
的值是functionB
;
答案 1 :(得分:0)
两个函数中this
的值应分别为rootObj.nestedObjA.functionA
,rootObj.nestedObjB.functionB
。要检查this
的值,可以在每个函数中添加console.dir(this)
。
要从函数返回值,您应该在函数体中添加return
,例如; return rootObj.nestedObjA.functionA()
rootObj.nestedObjB.functionB
var rootObj = {
nestedObjA: {
functionA: function() {
// what is value of 'this' here?
console.dir(this);
return 'foo';
}
},
nestedObjB: {
functionB: function() {
// how to reference? >> rootObj.nestedObjA.functionA
// what is the value of 'this' here?
console.dir(this);
return rootObj.nestedObjA.functionA()
}
}
}
var res = rootObj.nestedObjB.functionB();
console.log(res); // 'foo'