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 サイトの他の関連記事を参照してください。