這裏就是我想:在類中獲取一個類的實例的名稱
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
是否possibe在Javascript執行?
這裏就是我想:在類中獲取一個類的實例的名稱
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
是否possibe在Javascript執行?
事實是沒有這樣做的時候,我也很難想到的唯一辦法是進行循環,全部window
或範圍的對象和檢查某種平等與當前對象,像
this.do = function() {
for(var key in window) {
if(this === window[key]) {
alert(key);
}
}
};
爲了在分配之後進行調用。
var FOO = new Validator();
FOO.do();
,可以拿出另一個問題是,一個實例(參照)可以存儲在各種變量,所以也許不會得到你所期望的。
這工作,這裏有一個替代,但類似的解決方案http://stackoverflow.com/questions/2462199/javascript-list-global-variables-in-ie/2462341#2462341 –
沒有辦法直接做你在這裏要求的東西。對象本身並不是由它們的匹配變量名定義的 - 實際上,可能存在不直接分配給變量的對象,並將多個變量分配給同一對象。
JavaScript解釋器使用我們的變量名作爲標識符來幫助代碼執行,但一旦運行,變量名對運行的JavaScript程序沒有什麼區別,因爲它可能在執行時被縮減爲內存引用,與您編寫的原始代碼完全分離。
編輯:回答yannis確實有點模擬這個,但它依賴於在特定範圍內可用的變量 - 我的觀點是沒有直接的方式來從對象本身做到這一點,根據你的例子這個問題。
字面回答你的問題是:
(new Error()).stack
獲得上線,並在do()
方法被調用的功能的信息。我不建議這樣做。
你爲什麼需要它? – zerkms
那不是首先擊敗了物體的對象嗎? – BenM
我不認爲'FOO'是實例的名稱,而不是實例當前存儲的變量的名稱。 –