2014-09-07 4 views
4

Я новичок в JavaScript, исходя из фона Java. Мне трудно понять следующее поведение.Javascript Object vs Function

console.log(Object.constructor.name); // prints Function. 

console.log(Object instanceof Function); // prints true since Object's constructor is Function. 

Это означает, что объект является экземпляром функции.

console.log(Function instanceof Object); // prints true 

Как функция может быть экземпляром объекта, если объект является экземпляром Function?

Я запустил код в последнем браузере Chrome Chrome.

+0

Потому что они оба встроены в [* Объекты *] (http://ecma-international.org/ecma-262/5.1/#sec-15.2), которые также являются [* конструкторами (функциями) *] (http : //ecma-international.org/ecma-262/5.1/#sec-15.3), и именно так ECMA-262 определяет их взаимосвязь. Окружающая среда только что установлена ​​таким образом, одна из них не построена из другой. – RobG

+1

'prints true, поскольку конструктор объекта - это функция' Это неточно. Он печатает true, потому что прототип объекта унаследован от прототипа Function: 'Object._proto__ === Функция .__ proto__ // true' Они являются обеими функциями. –

+1

Почему вы хотите найти логику там, где это не так? Javascript имеет очень плохой тип системы проверки, вы можете использовать typeof и instanceof для тех же целей: проверка примитивных типов ... Иногда они несовместимы, например '1 экземпляр Number 'возвращает false и т. Д. – inf3rno

ответ

2

И Object, и Function являются конструкторами, поэтому они являются функциями.

Выражение Object instanceof Function возвращает true, поскольку Object является функцией, так что это экземпляр типа Function.

Выражение Function instanceof Object возвращает true, потому что Function является функцией, которая относится к типу Function, который наследует от типа Object.

+0

Кроме того, 'Function instanecof Function' – user123444555621

+0

и' Object .__ proto__ === Function.prototype' –

Смежные вопросы