2009-12-27 67 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检查内容。 解决方案可能是在这种情况下返回一个数组。

但我仍然在寻找一个解决这个棘手问题的最终解决方案。

相关问题