我需要用这种方式做了一个原型:对象(字符串或数组)名称。如何得到它?
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