Сообщение от Kolyaj
|
Function является наследником Object
|
Сообщение от Kolyaj
|
[] instanceof Object
|
Фокус:
alert(Function instanceof Object === Object instanceof Function);
Так что, instanceof в JS может тоже с толку сбивать, хотя и имеет четкий однозначный алгоритм.
Объектный тип в ES - один - это тип Object (не путать с конструктором Object!).
Типы различных объектов (отличных от созданных new Object или {}) можно образно называть (в кавычках) - "подтипами". Но на самом деле - все они имеют тип Object.
И различие происходит только за счет внутренних свойств: [[Class]], [[Call]] и т.д.
А уровень реализации здесь мало имеет значения. Естественно, там удобней создать какую-то иерархическую структуру классов с отдельным описанием Array-я, Object-a и т.д. (для хранения своих методов, перегрузки определённых методов, как, например, у Array-я перегружен [[Put]] - запись свойства-индекса увеличивает
.length).Но это не связано с уровнем абстракции ECMAScript-a, у которого есть только один объектный тип и называется он Object. А соответствующие конструкторы и их прототипы - это другое - и именно с этим связаны в реализациях классы Array, Object и любые другие.
А вот классифицируя "подтипами", например, на основании свойства [[Class]] (которое доступно для ES-абстракции) - да, можно разделять на подтип "Array" и "Object".