JS: создать экземпляр подкласса из экземпляра суперкласса

Я знаю, как // Shape - функция суперкласса Shape ( x , y ) { this . x = x ; это . y = y ; } // Прямоугольник - функция подкласса Rectangle ( x , y , w , h ) { Shape . call ( this , x , y ); // вызов супер-конструктора. это . w = w ; это . h = h ; } // подкласс расширяет суперкласс Rectangle . prototype = Object . создать ( Shape . прототип ); Прямоугольник . прототип . constructor = Rectangle ; прототипы подкласса из прототипов суперкласса. Но что, если у меня уже есть экземпляр объекта суперкласса для создания объекта подкласса?

Использование примера MDN для классического ООП в JS:

function createSquareFromShape(shape) {
    var rect = new Rectangle(1, 1);
    rect = Object.create(shape);
    // rect gets the shape prototype but loses Rectangle
}

Что делать, если у меня уже есть экземпляр формы, и я хочу создать на этом прямоугольник?

Object.create

Я знаю, что могу вручную копировать свойства с одного объекта на другой, но, может быть, есть более быстрый и простой способ?

javascript,oop,inheritance,

1

Ответов: 1


-1

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 и решить для себя, если стоит изучить шаблон, основанный на классе (это может быть очень поляризационная тема в сообществе)

JavaScript, ООП, наследование,
Похожие вопросы