打印构造函数变量的名称

Print name of constructor variable

本文关键字:变量 构造函数 打印      更新时间:2023-09-26

假设我有两个构造函数分配给两个变量:

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)

将打印example。但我不想那样。我想让它打印它所来自的构造函数变量的名称。

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

打印变量的内容,但是效果不理想。

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

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

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

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

如果你的代码没有在全局作用域中运行,这个技巧将不起作用!同样,这是一种技巧,你应该找到更好的方法来做事情,比如命名你的函数,即使它们是表达式。

Try instance,

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 '';
}