2017-02-07 6 views
0

Когда мы говорим «экземпляр», мы предполагаем, что имеем дело с объектом. Почему оператор JavaScript instanceof возвращает true, когда мы спрашиваем (class A { }) instanceof Function, но typeof (class A { }) == "function"? Почему не object?Почему в JavaScript класс A instanceof Function, но typeof class A не является объектом?

+0

Вы имеете дело с объектом. Функции - объекты в Javascript. – AmericanUmlaut

+1

Почему удивительно, что экземпляр функции имеет тип «функции»? Мне кажется, это было бы важным различием типа. –

+0

@squint, но ... но класс не является объектом =). Теперь очевидно, что это не относится к JavaScript ... – ktretyak

ответ

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" для значений функции, так как это определено в спецификации.