24 lines
1.2 KiB
Markdown
24 lines
1.2 KiB
Markdown
**Нет, не распознает, выведет `false`.**
|
||
|
||
Свойство `constructor` содержится в `prototype` функции по умолчанию, интерпретатор не поддерживает его корректность. Посмотрим, чему оно равно и откуда оно будет взято в данном случае.
|
||
|
||
Порядок поиска свойства `rabbit.constructor`, по цепочке прототипов:
|
||
|
||
1. `rabbit` -- это пустой объект, в нём нет.
|
||
2. `Rabbit.prototype` -- в него при помощи `Object.create` записан пустой объект, наследующий от `Animal.prototype`. Поэтому `constructor'а` в нём также нет.
|
||
3. `Animal.prototype` -- у функции `Animal` свойство `prototype` никто не менял. Поэтому оно содержит `Animal.prototype.constructor == Animal`.
|
||
|
||
```js run
|
||
function Animal() {}
|
||
|
||
function Rabbit() {}
|
||
Rabbit.prototype = Object.create(Animal.prototype);
|
||
|
||
var rabbit = new Rabbit();
|
||
|
||
*!*
|
||
alert( rabbit.constructor == Rabbit ); // false
|
||
alert( rabbit.constructor == Animal ); // true
|
||
*/!*
|
||
```
|
||
|