ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript でオブジェクトのクラス名を取得するには?

JavaScript でオブジェクトのクラス名を取得するには?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 13:27:17406ブラウズ

How to Get the Class Name of an Object in JavaScript?

JavaScript には、オブジェクトのクラス名を取得するための Java の 'class.getName()' メソッドに直接相当するものはありません。

ES2015 アップデート:

class Foo {}
console.log(Foo.name); // "Foo"

非クラス オブジェクトの場合、 「クラス」の指定は、「thing.constructor.name」プロパティを使用して見つけることができます。

var obj = {name: "John"};
console.log(obj.constructor.name); // "Object"

ハックと代替案:

ネイティブの 'クラスはありませんが、 .getName()' に相当します。クラスを取得するためのさまざまなハックや代替方法があります。 name:

Object.prototype.getName() ハック (推奨されません):

このハックは、オブジェクト プロトタイプを変更し、すべてのオブジェクトに「getName()」関数を追加します。オブジェクトを使用して、コンストラクター名を文字列として返すことができます。

Object.prototype.getName = function() {
  var funcNameRegex = /function (.{1,})\(/;
  var results = funcNameRegex.exec(this.constructor.toString());
  return results && results.length > 1 ? results[1] : "";
};

var obj = {name: "John"};
console.log(obj.getName()); // "Object"

コンストラクター プロパティ (問題あり):

すべてのオブジェクトには、それを作成したコンストラクター関数を指す 'constructor' プロパティがあります。

var myArray = [1, 2, 3];
console.log(myArray.constructor === Array); // true

ただし、'constructor' に依存します。プロパティには問題があります。

  • 継承が行われている場合、正確な情報が提供されない可能性があります。
  • クロスフレームとクロスウィンドウが壊れます。

instanceof の使用 (これも問題があります):

「instanceof」演算子は型チェックにも使用できます。

var myArray = [1, 2, 3];
console.log(myArray instanceof Array); // true

ただし、 「instanceof」はリテラル値に対しては機能せず、クロスフレームおよびクロスウィンドウも壊れます。

Object.prototype.toString の使用:

Object.prototype.toStringオブジェクトのタイプの文字列表現を返します。

console.log(Object.prototype.toString.call('abc')); // "[object String]"
console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"

このアプローチでは組み込み型の型情報を提供し、すべてのユーザー定義型の 'Object' を返します。

注意事項:

前述のすべてのメソッドには注意点があり、場合によってはあらゆる状況で信頼できるわけではありません。特に継承や匿名関数を扱う場合は、オブジェクトの構築方法を考慮してください。

以上がJavaScript でオブジェクトのクラス名を取得するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。