26

重複の可能性:
JavaScriptオブジェクトのクラスを取得する方法は?

Rubyでは、インスタンスのクラスをチェックするためにこれを行うことができます。

'this is an string'.class

=>String

jsに似たようなものはありますか?

4

4 に答える 4

44

おそらく、クラスではなく、型またはコンストラクターを意味します。JavaScript ではクラスの意味が異なります。

クラスを取得するには:

var getClassOf = Function.prototype.call.bind(Object.prototype.toString);
getClassOf(new Date());     // => "[object Date]"
getClassOf('test string');  // => "[object String]"
getClassOf({ x: 1 });       // => "[object Object]"
getClassOf(function() { }); // => "[object Function]"

この関連する MDN 記事を参照してください。

コンストラクターまたはプロトタイプを取得するには、必要なものに応じていくつかの方法があります。

使用しているプリミティブのタイプを調べるには、 を使用しますtypeof。これは、文字列、ブール値、数値などで使用するのに最適です。

typeof 'test string';  // => 'string'
typeof 3;              // => 'number'
typeof false;          // => 'boolean'
typeof function() { }; // => 'function'
typeof { x: 1 };       // => 'object'
typeof undefined;      // => 'undefined'

nullこの場合、 は奇妙な振る舞いをするtypeof nullことに注意して"object"ください"null"

また、JavaScript 継承のバックボーンであるプロトタイプをObject.getPrototypeOf(myObject)(サポートされていないmyObject.__proto__場合はmyObject.constructor.prototype一部のブラウザーでgetPrototypeOf) 取得することもできます。

次の方法でコンストラクターをテストできますinstanceof

new Date() instanceof Date;  // => true

でコンストラクターを合理的に取得することもできmyObject.constructorますが、これは変更できることに注意してください。コンストラクターの名前を取得するには、 を使用しますmyObject.constructor.name

new Date().constructor.name;   // => 'Date'
于 2012-08-18T13:17:05.257 に答える
18

これがすべてのブラウザに当てはまるかどうかはわかりませんが、次を使用できますconstructor.name

'some string'.constructor.name; //=>String
({}).constructor.name           //=>Object
(7.3).constructor.name          //=>Number
[].constructor.name             //=>Array
(function(){}).constructor.name //=>Function
true.constructor.name           //=>Boolean
/test/i.constructor.name        //=>RegExp
(new Date).constructor.name     //=>Date
(new function MyConstructor(){}())
  .constructor.name;            //=>MyConstructor

はJavascriptObjectのすべての母ですが、拡張することもできます (長所と短所があります) 。

Object.prototype.class = function(){
  return this.constructor.name;
}
'some string'.class(); //=>String
(23).class();          //=>Number
// etc...

: JavaScript は「クラス」を認識しません1。その継承モデルはプロトタイプです。

1 ECMAScript 標準から。

ECMAScript は、C++、Smalltalk、Java などのクラスを使用しません。代わりに、オブジェクトは、リテラル表記や、オブジェクトを作成し、プロパティに初期値を割り当てることによってオブジェクトのすべてまたは一部を初期化するコードを実行するコンストラクターなど、さまざまな方法で作成できます。各コンストラクターは、プロトタイプ ベースの継承と共有プロパティを実装するために使用される、prototype という名前のプロパティを持つ関数です。オブジェクトは、新しい式でコンストラクターを使用して作成されます。たとえば、new Date(2009,11) は新しい Date オブジェクトを作成します。new を使用せずにコンストラクターを呼び出すと、コンストラクターに依存する結果が生じます。たとえば、Date() は、オブジェクトではなく、現在の日付と時刻の文字列表現を生成します。

于 2012-08-18T13:11:46.303 に答える
3

typeofそしてinstanceofあなたが必要なものです

> x = "Hello, World!"
"Hello, World!"
> typeof x
"string"

コンストラクター名をチェックして、コンストラクタークラスの名前(またはクラスと呼ばれるもの)を取得できます。

> x.constructor.name
> "String"
于 2012-08-18T12:58:20.610 に答える
3

jsでは次を使用できます:

typeof

var a="this is string";
typeof a; // return "string"

function abc(){}
typeof abc; // return "function"

var a = {a:1,b:2,c:3}
typeof a; return "object"
于 2012-08-18T13:01:59.703 に答える