2009-12-27 65 views
1

我需要用這種方式做了一個原型:對象(字符串或數組)名稱。如何得到它?

Array.prototype.getname=function(){ [...]return arrayname; } 

所以我:

z=new Array; 
alert(z.name); 

,我應該有 「Z」 的警報。

我正在使用Chrome和調用者/被調用者似乎返回空。

+0

爲什麼你需要這些信息? – Gumbo 2009-12-27 20:08:42

+1

你做錯了。您將數組分配給的變量的名稱應完全且完全不相關。如果不是,你應該重新考慮你的代碼。 – 2009-12-29 11:58:14

+0

多麼無用的評論。只是說你沒有閱讀所有的討論,你不明白這個問題。 – Zibri 2010-01-04 19:03:10

回答

-1

所以現在最好的答案就是以利亞的

更普遍:

Object.prototype.getName = function() { 
    var prop; 
    for (prop in self) { 
    if (Object.prototype.hasOwnProperty.call(self, prop) && self[prop] === this && self[prop].constructor == this.constructor) { 
     return prop; 
    } 
    } 
    return ""; // no name found 
}; 

我不知道是否有更好的解決方案。

1

無法完成。無法訪問存儲對該對象的引用的變量的名稱。也許你應該解釋爲什麼你需要這樣的行爲,所以有人可以建議你一種解決問題的方法。

+0

嗯,我想添加一個原型保存字符串或數組(字符串化)到loalStorage。我可以明顯使例如笨功能:'函數保存(S,名稱){ localStorage的[名稱] = S; } (一個字符串) 但它會是更好的事: VAR了mystring =「這是一個蹩腳的字符串」; mystring.save(); 等有localStorage.mystring ==「這是一個蹩腳的字符串」' – Zibri 2009-12-29 11:17:16

3

你能做的最好的是,當你創建它始終明確設置數組的名字:

var z = []; 
z.name = 'z'; 

你可以通過具有功能makeArray,設置作爲參數傳遞的名字做

function makeArray(name) { 
    var arr = []; 
    arr.name = name; 
    return arr; 
} 

的基本問題是,幾個變量可以指向相同的數組:

var z = [], 
    x = z; 

那麼這個名字應該是:z還是x?

+0

謝謝,但這個改變的問題。 我需要一個*我*問題的答案。 – Zibri 2009-12-29 11:26:21

+0

只是因爲你可以問它,並不意味着這是一個明智的問題。 – 2009-12-29 11:59:35

1

問題是變量(如數組)可以有多個名稱。例如:

var a = new Array(); 
var b = a; 
a[0] = "hello"; 
alert(b[0]);//"hello" 

數組a,b的名稱是什麼?

1

做到這一點的唯一方法是強制檢查全局對象的所有屬性(假設變量是全局的),直到找到===數組的屬性。當然,它可以被多個變量引用,所以你必須選擇一個你得到的名字。此實現獲取第一個變量引用數組,將在瀏覽器和Web工作線程工作:

​​

當然,我不建議這樣做的。不要這樣做。

0

進一步測試object.getName()..我發現這個「問題」:

test1='test' 
test 
test2='test' 
test 
test1.getName() 
test1 
test2.getName() 
test1 

這是因爲它們具有相同的內容輸出,getName檢查內容。 解決方案可能是在這種情況下返回一個數組。

但我仍然在尋找一個解決這個棘手問題的最終解決方案。

相關問題