我需要用這種方式做了一個原型:對象(字符串或數組)名稱。如何得到它?
Array.prototype.getname=function(){ [...]return arrayname; }
所以我:
z=new Array;
alert(z.name);
,我應該有 「Z」 的警報。
我正在使用Chrome和調用者/被調用者似乎返回空。
我需要用這種方式做了一個原型:對象(字符串或數組)名稱。如何得到它?
Array.prototype.getname=function(){ [...]return arrayname; }
所以我:
z=new Array;
alert(z.name);
,我應該有 「Z」 的警報。
我正在使用Chrome和調用者/被調用者似乎返回空。
所以現在最好的答案就是以利亞的
更普遍:
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
};
我不知道是否有更好的解決方案。
無法完成。無法訪問存儲對該對象的引用的變量的名稱。也許你應該解釋爲什麼你需要這樣的行爲,所以有人可以建議你一種解決問題的方法。
嗯,我想添加一個原型保存字符串或數組(字符串化)到loalStorage。我可以明顯使例如笨功能:'函數保存(S,名稱){ localStorage的[名稱] = S; } (一個字符串) 但它會是更好的事: VAR了mystring =「這是一個蹩腳的字符串」; mystring.save(); 等有localStorage.mystring ==「這是一個蹩腳的字符串」' – Zibri 2009-12-29 11:17:16
你能做的最好的是,當你創建它始終明確設置數組的名字:
:var z = [];
z.name = 'z';
你可以通過具有功能makeArray,設置作爲參數傳遞的名字做
function makeArray(name) {
var arr = [];
arr.name = name;
return arr;
}
的基本問題是,幾個變量可以指向相同的數組:
var z = [],
x = z;
那麼這個名字應該是:z還是x?
謝謝,但這個改變的問題。 我需要一個*我*問題的答案。 – Zibri 2009-12-29 11:26:21
只是因爲你可以問它,並不意味着這是一個明智的問題。 – 2009-12-29 11:59:35
問題是變量(如數組)可以有多個名稱。例如:
var a = new Array();
var b = a;
a[0] = "hello";
alert(b[0]);//"hello"
數組a,b的名稱是什麼?
做到這一點的唯一方法是強制檢查全局對象的所有屬性(假設變量是全局的),直到找到===數組的屬性。當然,它可以被多個變量引用,所以你必須選擇一個你得到的名字。此實現獲取第一個變量引用數組,將在瀏覽器和Web工作線程工作:
當然,我不建議這樣做的。不要這樣做。
進一步測試object.getName()..我發現這個「問題」:
test1='test'
test
test2='test'
test
test1.getName()
test1
test2.getName()
test1
這是因爲它們具有相同的內容輸出,getName檢查內容。 解決方案可能是在這種情況下返回一個數組。
但我仍然在尋找一個解決這個棘手問題的最終解決方案。
爲什麼你需要這些信息? – Gumbo 2009-12-27 20:08:42
你做錯了。您將數組分配給的變量的名稱應完全且完全不相關。如果不是,你應該重新考慮你的代碼。 – 2009-12-29 11:58:14
多麼無用的評論。只是說你沒有閱讀所有的討論,你不明白這個問題。 – Zibri 2010-01-04 19:03:10