Обратите внимание, что даже если 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
Свойства могут быть добавлены в любое время на любой объект. Они не имеют ничего общего с конструкторами. – SLaks
И функции _are_ объектов. – SLaks
Я понял, спасибо! –