Javascript 对象(字符串或数组)名称。如何得到它?
我需要一个这样做的原型:Javascript 对象(字符串或数组)名称。如何得到它?,javascript,arrays,prototype,object,Javascript,Arrays,Prototype,Object,我需要一个这样做的原型: Array.prototype.getname=function(){ [...]return arrayname; } 因此,我可以: z=new Array; alert(z.name); 我应该在警报中有“z” 我正在使用Chrome,呼叫者/被呼叫者似乎返回为空。无法完成。无法访问存储对象引用的变量的名称。也许您应该解释为什么需要这样的行为,以便有人可以建议您解决问题的另一种方法。最好的方法是在创建阵列时始终显式设置其名称: var z = []; z.na
Array.prototype.getname=function(){ [...]return arrayname; }
因此,我可以:
z=new Array;
alert(z.name);
我应该在警报中有“z”
我正在使用Chrome,呼叫者/被呼叫者似乎返回为空。无法完成。无法访问存储对象引用的变量的名称。也许您应该解释为什么需要这样的行为,以便有人可以建议您解决问题的另一种方法。最好的方法是在创建阵列时始终显式设置其名称:
var z = [];
z.name = 'z';
您可以使用函数makeArray来设置作为参数传递的名称:
function makeArray(name) {
var arr = [];
arr.name = name;
return arr;
}
基本问题是,几个变量可以指向同一个数组:
var z = [],
x = z;
那么名称应该是什么:z还是x?问题是一个变量(如数组)可以有多个名称。例如:
var a = new Array();
var b = a;
a[0] = "hello";
alert(b[0]);//"hello"
数组的名称是什么,a还是b?唯一的方法是强制检查全局对象的所有属性(假设变量是全局的),直到找到===数组的属性为止。当然,它可以被多个变量引用,因此您必须选择一个您得到的名称。此实现获取引用数组的第一个变量,并将在浏览器和web工作线程中工作:
Array.prototype.getName = function () {
var prop;
for (prop in self) {
if (Object.prototype.hasOwnProperty.call(self, prop) && self[prop] === this) {
return prop;
}
}
return ""; // no name found
};
当然,我一点也不推荐这个。不要这样做。所以现在最好的答案是以利亚的 更一般地说:
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
};
我想知道是否有更好的解决方案。进一步测试object.getName()。。我发现了这个“问题”:
test1='test'
test
test2='test'
test
test1.getName()
test1
test2.getName()
test1
发生这种情况是因为它们具有相同的内容,并且getName检查内容。
在这种情况下,一个解决方案可能是返回一个数组
但我仍在寻找解决这个脑筋急转弯问题的最终方法。你为什么需要这些信息?你做错了。将数组分配给的变量的名称应该完全无关。如果不是,你应该重新考虑你的代码。多么没用的评论啊。就说你没有阅读所有的讨论,你不理解这个问题。我想添加一个原型,将字符串或数组(字符串化)保存到loalStorage。显然,我可以创建一个愚蠢的函数,例如:
function save(s,name){localStorage[name]=s;}(对于字符串),但最好这样做:var mystring=“这是一个蹩脚的字符串”;mystring.save();还有localStorage.mystring==“这是一个蹩脚的字符串”
谢谢,但这改变了问题。我的问题需要一个答案。仅仅因为你可以问,并不意味着这是一个明智的问题。