如何在fn.call之后获得原始上下文?

时间:2013-08-21 02:21:56

标签: javascript function oop scope

我正在使用“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/

2 个答案:

答案 0 :(得分:1)

你不能。

如果你需要它 - 将它作为函数参数传递。

答案 1 :(得分:0)

没有“基础”背景。 this绑定是在调用时动态确定的,它不是函数固有的。无法从函数中确定它,因为函数没有“父”对象,实际上它们可以附加到多个对象。正如zerkms已经说过的,如果你需要更多关于函数的信息,你必须传递它 - 或者从可访问的范围中获取它(如果可用的话)。例如,这将起作用:

alert('Original Joe context name is: ' + joe.name);