Попробовал разобраться в наследовании объектов по прототипам, тема сложная местами, поэтому возникают вопросы...(вопросы в комментах кода, ближе к концу). Код сочинял сам, возможно где-то сильно заблуждаюсь в комментах.
//первый "класс"
//по умолчанию, прототипом объектов данного "класса" является
//объект встроенного класса Object
//Свойство MyArray1.prototype = new Object()
var MyArray1 = function() {};
//Создаем объект класса MyArray1
var first = new MyArray1();//
//MyArray1.prototype = объекту-прототипу (класса Object), который
//по умолчанию имеет единственое свойство constructor,
//В общем случае свойство constructor объекта указывает на его конструктор,
//но в данном случае, constructor прототипа указывает на саму функцию конструктор,
//с которой этот прототип ассоциируется, т.е. на MyArray1
alert("First object");
alert("constructor");
alert("(MyArray1.prototype.constructor == MyArray1) = " + (MyArray1.prototype.constructor == MyArray1));//true
alert("(MyArray1.prototype.constructor == Object)=" + (MyArray1.prototype.constructor == Object));//false
//а это в общем случае:свойство конструктор будет указывать на конструктор данного объекта
alert("(first.constructor == MyArray1) = " + (first.constructor == MyArray1));//true
alert("(first.constructor == Object) = " + (first.constructor == Object));//false
//создадим второй "класс"
var MyArray2 = function() {};
//оператор instanceof
alert("instanceof");
alert("(first instanceof MyArray1) = " + (first instanceof MyArray1));//true
alert("(first instanceof MyArray2) = " + (first instanceof MyArray2));//false
alert( "(first instanceof Object) = " + (first instanceof Object));//true
//Далее назначим явно прототип
MyArray1.prototype = new MyArray2();
//второй объект класса MyArray1(), теперь уже у класса другой прототип
var second = new MyArray1();
alert("Second object");
//оператор instanceof
alert("instanceof");
alert("(second instanceof MyArray1) = " + (second instanceof MyArray1));//true
alert("(second instanceof MyArray2) = " + (second instanceof MyArray2));//true
alert( "(second instanceof Object) = " + (second instanceof Object));//true
alert("constructor");
//Так как теперь прототип указан "явно", то, по умолчанию, его свойство constructor равно его
//коструктору
alert("(MyArray1.prototype.constructor == MyArray2) = " + (MyArray1.prototype.constructor == MyArray2));//true
//и, соответственно
alert("(MyArray1.prototype.constructor == MyArray1) = " + (MyArray1.prototype.constructor == MyArray1));//false
//теперь наследование свойства constructor, происходит , видимо, несколько не так, как
//наследование обычного свойства:
alert("(second.constructor == MyArray1) = " + (second.constructor == MyArray1));//false
alert("(second.constructor == MyArray2) = " + (second.constructor == MyArray2));//true - наследуется свойство constructor прототипа
//хотя по идее, если не ошибаюсь, должно происходить перекрытие свойств родителя
//----------------------------------------------------------------------
//До этого момента логика была более менее связная...
//Вот теперь вопрос
//Если мы "продолжим" наследование
MyArray2.prototype = new Array();
//т.е. по идее: объекты "класса" MyArray1 имеют прототипом объект класса MyArray2
//а объекты класса MyArray2 - прототипом объект класса Array()
//=> вроде как цепочка
var third = new MyArray1();
alert("Third object");
//Совбственно дальше один большой вопрос, почему alert выдает такие значения?
alert("instanceof");
alert("(third instanceof MyArray1) = " + (third instanceof MyArray1));//true
alert("(third instanceof MyArray2) = " + (third instanceof MyArray2));//false ?????????????????
alert("(third instanceof Array) = " + (third instanceof Array));//false ?????????????????
alert("(third instanceof Object) = " + (third instanceof Object));//true
alert("constructor");
alert("(MyArray1.prototype.constructor == MyArray2) = " + (MyArray1.prototype.constructor == MyArray2));// ??? true, а здесь не
//должно происходить какое-нибудь очередное наследование конструктора прототипа?,
//он же объект класса MyArray2 и имеет прототип - объект класса Array => его конструктор
//по идее должен наследоваться?
//т.е. MyArray1.prototype.constructor по идее должен быть равен Array???? или нет..
alert("(MyArray1.prototype.constructor == Array) = " + (MyArray1.prototype.constructor == Array));//false ???
alert("(MyArray1.prototype.constructor == MyArray1) = " + (MyArray1.prototype.constructor == MyArray1));//false
alert("(third.constructor == MyArray1) = " + (third.constructor == MyArray1));//false
alert("(third.constructor == MyArray2) = " + (third.constructor == MyArray2));//true
alert("(third.constructor == Array) = " + (third.constructor == Array));//false , здесь не происходит дальнейшего наследования????