2016-04-18 3 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 является свойством конструктора функции номер? Я изучаю объекты, и я думал, что свойства и методы добавляются функцией-конструктором в объекты.Номер. [Свойство] является свойством объекта или конструктора?

спасибо за любые объяснения!

+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

благодарю вас за ваше время и ответ! –

Смежные вопросы