打印构造函数变量的名称

时间:2013-06-07 21:25:32

标签: javascript arrays variables object constructor

说,我有2个构造函数分配给2个变量:

var example1 = function(argument1){
    this.argument1 = argument1;
}

var example2 = function(argument2){
    this.argument2 = argument2;
}

包含来自这两个构造函数的对象的对象数组:

var array1 = new Array();
array1[0] = new example1(example);
array1[1] = new example2(example);

我的问题是,当我从数组中选择一个项目时,如何打印它来自的构造函数变量的名称?

为了使这个明确和简洁,这是一个例子:

console.log(array1[0].argument1)

将打印示例。但我不希望这样。我希望它打印它来自的构造函数变量的名称。

console.log(array1[0].constructor.toString());

打印变量的内容,但不令人满意。

3 个答案:

答案 0 :(得分:2)

您需要为函数提供名称: -

var example1 = function example1(argument1){
    this.argument1 = argument1;
}
 var array1 = new Array();
array1[0] = new example1({});

console.log(array1[0].constructor.name)

答案 1 :(得分:0)

在大多数浏览器中,函数都有一个名称,但您不使用它。 所以,我们不得不求助于黑客在云中找到你的构造函数,这在IE7中不起作用,也许8:

console.log(Object.keys(self).filter(function(a){
     return self[a]===array1[0].constructor;
})[0]);

如果您没有在全局范围内运行代码,这个技巧将无效! 再次,这是一个黑客,你应该找到一个更好的做事方式,比如命名你的功能,即使它们是表达式。

答案 2 :(得分:0)

尝试实例,

var example1 = function(argument1){
    this.argument1 = argument1;
}

var example2 = function(argument2){
    this.argument2 = argument2;
}

console.log(getName(array1[0]));

function getName(value) {

    if (value instanceof example1) return 'example1';
    if (value instanceof example2) return 'example2';

    return '';

}