This commit is contained in:
Ilya Kantor 2016-11-14 23:41:18 +03:00
parent f99574f53b
commit b0976b5253
153 changed files with 590 additions and 533 deletions

View file

@ -0,0 +1,24 @@
**Нет, не распознает, выведет `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
*/!*
```

View file

@ -0,0 +1,21 @@
importance: 5
---
# Что содержит constructor?
В коде ниже создаётся простейшая иерархия классов: `Animal -> Rabbit`.
Что содержит свойство `rabbit.constructor`? Распознает ли проверка в `alert` объект как `Rabbit`?
```js
function Animal() {}
function Rabbit() {}
Rabbit.prototype = Object.create(Animal.prototype);
var rabbit = new Rabbit();
alert( rabbit.constructor == Rabbit ); // что выведет?
```