Когда мы говорим «экземпляр», мы предполагаем, что имеем дело с объектом. Почему оператор JavaScript instanceof
возвращает true
, когда мы спрашиваем (class A { }) instanceof Function
, но typeof (class A { }) == "function"
? Почему не object
?Почему в JavaScript класс A instanceof Function, но typeof class A не является объектом?
0
A
ответ
4
Почему оператор в JavaScript
instanceof
возвращает истину, когда мы спрашиваем(class A { }) instanceof Function
class
эс просто синтаксический сахар для функций конструктора. То есть оценка class A {}
создает функцию.
Следующие два примера (более или менее), что эквивалентно, т.е. они дают одинаковый результат/значение:
// class
class A {
constructor() {
this.foo = 42;
}
bar() {
console.log(this.foo);
}
}
// constructor function
function A() {
this.foo = 42;
}
A.prototype.bar = function() {
console.log(this.foo);
}
Все, что не является элементарным значением (строка, число, логическое значение, нулевой, не определено, символ) является объектом JavaScript. Функции также являются объектами со специальными внутренними свойствами, которые делают их вызываемыми (и/или конструируемых).
Почему не возражали?
typeof
возвращает строку "function"
для значений функции, так как это определено в спецификации.
Вы имеете дело с объектом. Функции - объекты в Javascript. – AmericanUmlaut
Почему удивительно, что экземпляр функции имеет тип «функции»? Мне кажется, это было бы важным различием типа. –
@squint, но ... но класс не является объектом =). Теперь очевидно, что это не относится к JavaScript ... – ktretyak