2010-05-31 25 views
3

是否有可能得到this一個函數的caller在JavaScript 被稱爲有沒有傳遞this的論據支持IE瀏覽器的方式以及Firefox/Chrome等?得到「本」是一個功能的調用者是在JavaScript調用

例如:

var ob = { 
    callme: function() { 
     doSomething(); 
    } 
} 
ob.callme(); 

function doSomething() { 
    alert(doSomething.caller.this === ob); // how can I find the `this` that 
              // `callme` was called with 
              // (`ob` in this case) without 
              // passing `this` to `doSomething`? 
} 

我開始懷疑它不是,但我想我可能會問,因爲它會成爲我的代碼更短,更易於閱讀。

+1

@stagas:'__parent__'是一個Mozilla擴展,它實際上只在犀牛工作良好,這是以暴露*可變對象*(一個函數的範圍鏈的頂端對象)的方式,其中變量,參數和函數聲明被綁定。 – CMS 2010-05-31 03:35:34

回答

3

嗯,我能想到的最接近,不技術上傳遞值作爲參數,將設置doSomething功能的this值。

由於doSomething功能沒有綁定任何對象,默認情況下,如果你把它像doSomething();裏面的this值將引用全局對象,而這通常沒有太大的用處...

對於例如:

var ob = { 
    callme: function() { 
    doSomething.call(this); // bind the `this` value of `doSomething` 
    } 
}; 

function doSomething() { 
    alert(this === ob); // use the bound `this` value 
} 

ob.callme(); 
+0

它確實看起來好像無法以某種方式傳遞它是不可能的。不過謝謝,如果今天晚些時候沒有人解決它,我會將其標記爲已接受:-) – cryo 2010-05-31 03:52:11