Когда мы говорим «экземпляр», мы предполагаем, что имеем дело с объектом. Почему оператор 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"
для значений функции, так как это определено в спецификации.
Смежные вопросы
- 1. typeof a == 'undefined' vs typeof a === 'undefined'
- 2. Почему typeof null является «объектом» в javascript?
- 3. Javascript var a = function b() {}
- 4. TypeError: a не является объектом. (оценка «длина» в a)
- 5. TypeOf (function.arguments) является объектом
- 6. Тэг `A` не является корректным, но почему?
- 7. Почему TypeOf Object, String, Number ... -a функция Javascript
- 8. если (а = нуль && InstanceOf A!) ... или если (а InstanceOf A)
- 9. .class a: hover vs .class: hover a
- 10. Почему typeof моя переменная является объектом, а не числом
- 11. замыкающий синтаксис: (function a() {})() == (function a() {}())?
- 12. Javascript, поведение instanceof function
- 13. Javascript instanceof & typeof в GWT (JSNI)
- 14. Javascript Auto run a function
- 15. C++ redefine a class
- 16. Member function a friend
- 17. Является ли ES6 `export class A` эквивалентным` module.exports = A`?
- 18. jquery clone function a a addClass inested
- 19. Почему `A & a = a` действительно?
- 20. SignalR, Not a Function
- 21. Является самоинициализацией 'A a = a;' позволил?
- 22. В чем разница между var a = {} и var a = function() {}
- 23. Refactor a C# Class
- 24. a = 0; почему (++ a + ++ a * ++ a) = 7?
- 25. TypeError: $ (...) not a function
- 26. Generic [A] где A - класс?
- 27. Класс B расширяет класс A, но класс A имеет свойство класса B
- 28. A => Класс [A] с использованием ClassTag?
- 29. Различия между typeof и instanceof в JavaScript
- 30. Почему `var a = function() {}` похож на `function a() {}` в следующем случае?
Вы имеете дело с объектом. Функции - объекты в Javascript. – AmericanUmlaut
Почему удивительно, что экземпляр функции имеет тип «функции»? Мне кажется, это было бы важным различием типа. –
@squint, но ... но класс не является объектом =). Теперь очевидно, что это не относится к JavaScript ... – ktretyak