对象(字符串或数组)名称。怎么弄明白?

时间:2009-12-27 19:47:04

标签: javascript arrays prototype object

我需要以这种方式完成原型:

Array.prototype.getname=function(){ [...]return arrayname; }

所以我可以:

z=new Array;
alert(z.name);

我应该在警报中有“z”。

我正在使用Chrome,调用方/被调用方似乎返回空白。

6 个答案:

答案 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 
};

我想知道是否有更好的解决方案。