Существует разница между назначением прототипа и назначением нового свойства прототипу объекта.
Вы объявили функцию Person как функцию-конструктор, но затем вы в значительной степени назначаете еепрототип, выполнив это:
Person.prototype = {
toString: function() { return this.firstName + ' ' + this.lastName; }
};
Это означает, что вы присваиваете новую пару значений ключа объекта toString-function для Person.prototype вместо того, чтобы фактически добавлять к нему новое свойство, в котором вы должны были бы сделать это так:
Person.prototype.toString = function() { return this.firstName + ' ' + this.lastName; }
Из этого следует, что когда вы на самом деле создаете новый объект, который наследуется от объекта Person, вызывая Object.create
, то, что происходит в его реализации, это новый объект, который будет создан заново,и затем он вернет тот новый объект, который переопределит свойство прототипа, которое, как предполагал javascript, вы создали, выполнив это Person.prototype
присваивание, ранее ранее в вашем коде.