2017-03-18 72 views
1

我正在創建一個JavaScript代碼,我遇到了一種情況,我想在對象方法中讀取對象名稱(字符串)。我試圖實現的示例代碼如下所示:在JavaScript中獲取對象變量名稱

// Define my object 
var TestObject = function() { 
    return { 
     getObjectName: function() { 
      console.log(/* Get the Object instance name */); 
     } 
    }; 
} 

// create instance 
var a1 = TestObject(); 
var a2 = TestObject(); 

a1.getObjectName(); // Here I want to get the string name "a1"; 

a2.getObjectName(); // Here I want to get the string name "a2"; 

我不確定這是否可以在JavaScript中使用。但如果是這樣,我很樂意聽到你們如何實現這一目標。

+2

你不能得到變量的名稱。可能有多個變量引用同一個對象。你可以給該對象一個'name'屬性,然後使用'a1.name'。你想在這裏解決什麼潛在的問題? – nnnnnn

+0

我想你可以在這裏得到答案。 http://stackoverflow.com/questions/4602141/variable-name-as-a-string-in-javascript –

+0

你的困惑始於你使用術語「對象名稱」。對象沒有名字。他們只是價值觀。它們可能被*保存在一個變量中,但該變量不是它的「名稱」,除非是非正式的。 – 2017-03-18 06:18:01

回答

3

這在JavaScript中不可行。一個變量只是一個對象的引用,同一個對象可以被多個變量引用。沒有辦法告訴哪個變量被用來訪問你的對象。然而,如果你傳遞一個name你的構造函數,你可以返回來代替:

// Define my object 
 
function TestObject (name) { 
 
    return { 
 
     getObjectName: function() { 
 
      return name 
 
     } 
 
    }; 
 
} 
 

 
// create instance 
 
var a1 = TestObject('a1') 
 
var a2 = TestObject('a2') 
 

 
console.log(a1.getObjectName()) //=> 'a1' 
 

 
console.log(a2.getObjectName()) //=> 'a2'

+0

謝謝。我目前正在這樣做,但想檢查是否有某種方法可以避免手動傳遞。感謝您的幫助。 :)。 – programmer

+0

@programmer很高興爲您提供幫助。如果您可以騰出時間,我也會很高興接受一次投票,儘管時間已晚了:) – gyre