2016-04-18 9 views
0
console.log(Number) //returns constructor function Number(), not an Object 
console.log(Number.NaN) //returns the value of property NaN 

は、プロパティでNumber.NaNこと、それはどういう意味NaNをは、コンストラクタ関数の財産ですか?私はオブジェクトについて学習しており、プロパティとメソッドがコンストラクタ関数によってオブジェクトに追加されたと考えました。Number。[property]はオブジェクトまたはコンストラクタのプロパティですか?

説明をいただきありがとうございます。

+4

任意のオブジェクトにいつでもプロパティを追加できます。彼らはコンストラクタとは何の関係もありません。 – SLaks

+4

そして関数_are_オブジェクト。 – SLaks

+0

私はそれをありがとう! –

答えて

1

typeofが何かがオブジェクトではなく関数であると言っても、関数は依然としてオブジェクトです。だから、あなたはそれにプロパティを追加することができます。この場合

function f(){} 
Object(f) === f; // true - belongs to Object type 
f.prop = 'val'; 
f.prop; // 'val' 

を、Numberが関数としてまたはコンストラクタとして使用することができます。

Number("123"); // 123 - used as a function, returns a primitive 
new Number("123"); // Number {123} - used as a constructor, returns an object 

あなたは関数としてそれを見れば、NaNだけです通常のプロパティ。

コンストラクタとして見ると、NaNは静的なプロパティであると言えるでしょう。コンストラクタの静的プロパティは、プロトタイプ継承を介してインスタンスではなくコンストラクタに属します。

class Foo { 
    static func1() { return 1;} 
    func2() { return 2; } 
} 
Foo.func1(); // 1 - static method 
new Foo().func2(); // 2 - prototypical method 
+0

あなたの時間と反応に感謝します! –

関連する問題