我正在使用“call”方法来触发函数并更改范围,但是如何在执行此操作后获取原始范围?换句话说,如何访问“基础”上下文?
例如,我正在调用“joe”并将“jill”作为上下文传递。但是,在“问候”中的第二个警报中,如何访问“name:Joe”变量?
var joe = {
name : "Joe",
greet : function (name) {
alert(this.name + " says hello to " + name);
//Below is wrong. How do I get "Joe"?
alert('Original Joe context name is: ' + this.name);
}
};
var jill = {
name : "Jill"
};
//Outputs "Jill says hello to Mike"
joe.greet.call(jill, "Mike");
以下是此示例的jsFiddle:http://jsfiddle.net/ueeRk/
答案 0 :(得分:1)
你不能。
如果你需要它 - 将它作为函数参数传递。
答案 1 :(得分:0)
没有“基础”背景。 this
绑定是在调用时动态确定的,它不是函数固有的。无法从函数中确定它,因为函数没有“父”对象,实际上它们可以附加到多个对象。正如zerkms已经说过的,如果你需要更多关于函数的信息,你必须传递它 - 或者从可访问的范围中获取它(如果可用的话)。例如,这将起作用:
alert('Original Joe context name is: ' + joe.name);