В книге "JavaScript для ниндзя" было предложено следующее исправление для свойства конструктора при создании прототипной цепочки между объектами:
Если я создаю объект Person следующим образом:
var person = new Person();
alert(person.constructor == Ninja); // Display true
Несмотря на то, что он устраняет проблему, что ninja.constructor будет ссылаться на функцию Ninja, но это создает еще одну проблему, которая теперь person.constructor также будет ссылаться на функцию Ninja вместо человека.
Воспроизводимый пример:
function Person() {
}
var person = new Person();
Person.prototype.dance = function() {};
function Ninja() {
}
Ninja.prototype = person;
Object.defineProperty(Ninja.prototype, "constructor", {
enumerable: false,
value: Ninja,
writable: true
})
var ninja = new Ninja();
alert(person.constructor == Ninja); // Display true
Я не могу понять, почему это исправление было предложено автором.