2017-01-24 4 views
-1

なぜjavascriptの組み込みコンストラクタはオブジェクトではなく値を返しますか?new演算子で呼び出され、それでもオブジェクトは返されません。newでインスタンス化されたコンストラクタはまだ戻り値を持っています

 new Number() //returns 0 instead of [Object object] 
     new String() //returns "" 
     new Date() //returns today's date 

     function SomeConstructor() { 
     return "Value" 
     } 
     new SomeConstructor() // [Object object] 
     SomeConstructor() // returns "Value" 

このようなコンストラクタを作成するにはどうすればよいですか?

+0

ことができます。https://javascriptweblog.wordpress.com/2010/09/27/the-secret-life- of-javascript-primitives/ –

+1

オブジェクトを返します。 'toString()'メソッド(印刷に使用される文字列表現を返す)を実装しているため '[Object object]'としては印刷されません –

+0

[コンストラクタ関数の戻り値は "\ [Object object \ ] "](http://stackoverflow.com/questions/41808464/constructor-function-return-is-other-than-object-object) –

答えて

0

実際にはオブジェクトです。typeofで確認できます。

使用できるサブタイプを取得するにはObject.prototype.toString

@Michaelリッターが指摘したように(それだけで[Objectオブジェクト]として印刷されていない

は、彼らが のtoString()メソッドを実装しているためこれ 印刷に使用される文字列表現を返す)

console.log(typeof new Number()) //object 
 
    console.log(typeof new String()) //object 
 
    console.log(typeof new Date()) //object 
 
    
 
    console.log(Object.prototype.toString.call(new Number())) //[object Number] 
 
    console.log(Object.prototype.toString.call(new String())) //[object String] 
 
    console.log(Object.prototype.toString.call(new Date())) //[object Date]

2番目の質問に答えるには、プリミティブ形式ではなくオブジェクト形式のものを返します。その理由は、あなたがJSプリミティブにこの材料を探求したい場合がありますfound here

 function SomeConstructor() { 
 
      return new String("Value"); 
 
     } 
 
     console.log(new SomeConstructor(), new SomeConstructor().valueOf());

関連する問題