我需要以这种方式完成原型:
Array.prototype.getname=function(){ [...]return arrayname; }
所以我可以:
z=new Array;
alert(z.name);
我应该在警报中有“z”。
我正在使用Chrome,调用方/被调用方似乎返回空白。
答案 0 :(得分:4)
您可以做的最好是在创建时始终显式设置数组的名称:
var z = [];
z.name = 'z';
你可以通过设置一个函数makeArray来设置作为参数传递的名称:
function makeArray(name) {
var arr = [];
arr.name = name;
return arr;
}
基本问题是几个变量可以指向同一个数组:
var z = [],
x = z;
那么这个名字应该是什么:z或x?
答案 1 :(得分:2)
问题是变量(如数组)可以有多个名称。例如:
var a = new Array();
var b = a;
a[0] = "hello";
alert(b[0]);//"hello"
数组的名称是a,b?
答案 2 :(得分:1)
无法完成。无法访问存储对象引用的变量的名称。也许你应该解释为什么你需要这样的行为,所以有人可以建议你另一种解决问题的方法。
答案 3 :(得分:1)
执行此操作的唯一方法是强制检查全局对象的所有属性(假设变量是全局的),直到找到===数组的属性。当然,它可以被多个变量引用,因此您必须选择其中一个名称。此实现获取引用该数组的第一个变量,并将在浏览器和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
};
当然,我根本不推荐这个。不要这样做。
答案 4 :(得分:0)
进一步测试object.getName()..我发现了这个'问题':
test1='test'
test
test2='test'
test
test1.getName()
test1
test2.getName()
test1
发生这种情况是因为它们具有相同的内容和getName检查内容。
在这种情况下,解决方案可能是返回一个数组。
但我仍在寻找解决这一脑力激荡问题的最终解决方案。
答案 5 :(得分:-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
};
我想知道是否有更好的解决方案。