我知道如何使用方法來更改函數/方法調用的上下文:apply,bind,call。我的問題是,有沒有辦法來檢查一個函數/方法是否已經有它的上下文集?JavaScript函數/方法上下文檢查
// given
var beta;
function alpha() {
return this;
}
function isContextSet (fn) {
/* check for context binding on fn */
}
beta = alpha.bind("hello");
isContextSet(alpha); // returns false
isContextSet(beta); // returns true
我想我知道這個問題的答案了,不過想我會問無論如何,如果沒有其他原因比:1,確認我的假設,或2學到一些東西。我敢肯定,我不是第一個問這個問題,但我不知道如何真正找到答案,因爲我得到的答案都是如何使用:.apply(),.call()或。綁定()。
也許這可以幫助:[javascript函數被綁定到什麼物體(什麼是它的「本」)?](http://stackoverflow.com/q/14307264/218196)。 –
_「已經有了它的上下文集合」_「已經」是什麼意思? '.apply()','.call()'和'.bind()'在每次函數被調用時都不會永久設置this [注意'.bind()'返回一個永久的_new_函數具有特定的'this',但實際上並沒有改變_original_函數)。調用一個函數的每種可能的方式都會將'this'設置爲_something_ - 這只是一些隱式的方式,有些是明確的...... – nnnnnn
我添加了一些代碼來展示我正在嘗試着解決的問題。我理解這三種方法是如何工作的,並且我知道如何在調用的主體內檢查函數/方法的上下文。如上所示,如何從調用外部檢查上下文?在JS中我根本無法想到這樣做。 – kalisjoshua