create
возвращает новый объект с его прототипом, установленным для любого объекта, который вы передали, в качестве первого параметра create
метода. Таким образом, вы переписываете переменную rect с новым объектом.
Вы не сможете создать объект Rectangle из объекта Shape, так как Rectangle является специализацией вашего объекта Shape, Shape не знает, каким образом он был специализированным.
Если вы решите изучить стиль на основе JavaScript для JavaScript, я бы предложил функцию на вашем «классе» (объекте) Shape, которая создает из него Rectangles. Или фабрику, которая может принимать форму и возвращать прямоугольник, вдоль линий
var ShapeFactory = {
CreateRectange: function(shape, w, h) {
var rect = new Rectangle();
rect.x = shape.x;
rect.y = shape.y;
rect.w = w;
rect.h = h;
return rect;
}
}
var shape = new Shape(1,1);
var rect = ShapeFactory.CreateRectangle(shape, 1, 1);
Я чувствую, что мне нужно предложить прочитать эту серию книг https://github.com/getify/You-Dont-Know-JS специально https://github.com/getify/You-Dont-Know-JS/tree/master / this% 20% 26% 20object% 20prototypes и решить для себя, если стоит изучить шаблон, основанный на классе (это может быть очень поляризационная тема в сообществе)