2013-08-21 23 views
1

我正在使用「調用」方法來觸發一個函數並更改範圍,但是如何在執行此操作後獲取原始範圍?換句話說,如何訪問「基礎」上下文?如何獲得fn.call後的原始上下文?

例如,我打電話「joe」並傳遞「jill」作爲上下文。但是,在「問候」中的第二條警告中,如何訪問「名稱: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/

回答

1

你不能。

如果您需要它 - 將它作爲函數參數傳遞。

0

沒有「基礎」上下文。綁定是在通話時動態確定的,它不是固有的功能。無法從函數內部確定它,因爲函數沒有「父」對象,實際上它們可以附加到多個對象。正如zerkms所說的那樣,如果您需要更多信息到函數中,您必須將其傳遞給–或從可訪問範圍中獲取(如果可用)。例如,這會工作:

alert('Original Joe context name is: ' + joe.name); 
相關問題