1

たとえば、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());

変数の内容を出力しますが、不十分です。

4

3 に答える 3

2

関数に名前を付ける必要があります:-

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

console.log(array1[0].constructor.name)
于 2013-06-07T21:30:33.663 に答える
0

ほとんどのブラウザーでは、関数に名前がありますが、それを使用しません。したがって、クラウドでコンストラクターを見つけるためにハックに頼る必要があります。これは、IE7、おそらく 8 では機能しません。

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

コードがグローバル スコープで実行されていない場合、このトリックは機能しません。繰り返しますが、これはハックであり、式であっても関数に名前を付けるなど、より良い方法を見つける必要があります。

于 2013-06-07T21:31:29.117 に答える
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 '';

}
于 2013-06-07T21:34:26.780 に答える