说,我有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());
打印变量的内容,但不令人满意。
答案 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 '';
}