Наследование объектов в JavaScript

Мой вопрос касается дочернего объекта, поддерживающего цепочку прототипов своего родительского объекта.

В продвинутых слайдах Javascript Джона Резига (http://ejohn.org/apps/learn/#76он пишет, что для поддержки цепочки прототипов дочернего объекта необходимо создать новый родительский объект.

Однако через пару быстрых тестов я заметил, что цепочка прототипов поддерживается путем установки прототипа дочернего объекта равным прототипу родительского объекта.

Любые разъяснения будут с благодарностью!

Оригинальный код

function Person(){}
Person.prototype.dance = function(){};

function Ninja(){}

// Achieve similar, but non-inheritable, results
Ninja.prototype = Person.prototype;
Ninja.prototype = { dance: Person.prototype.dance };

assert( (new Ninja()) instanceof Person, "Will fail with bad prototype chain." );

// Only this maintains the prototype chain
Ninja.prototype = new Person();

var ninja = new Ninja();
assert( ninja instanceof Ninja, "ninja receives functionality from the Ninja prototype" );
assert( ninja instanceof Person, "... and the Person prototype" );
assert( ninja instanceof Object, "... and the Object prototype" );

Моя модифицированная версия

function Person(){}
Person.prototype.dance = function(){console.log("Dance")};

function Ninja(){}

// Achieve similar, but non-inheritable, results
Ninja.prototype = Person.prototype;

assert( (new Ninja()) instanceof Person, "Will fail with bad prototype chain." );

var ninja = new Ninja();
assert( ninja instanceof Ninja, "ninja receives functionality from the Ninja prototype" );
assert( ninja instanceof Person, "... and the Person prototype" );
assert( ninja instanceof Object, "... and the Object prototype" );
ninja.dance();

Ответы на вопрос(2)

Ваш ответ на вопрос