artzub
@artzub
Программист

Как организовать наследование свойств объектом другого объекта с возможностью одновременного изменения значения у обоих (JavaScript)?

Столкнулся с задачей. Нужно создать ряд объектов, у которых есть общее поведение, в моем случае это метод get, но также у каждого есть куча других свойств, на основе которых и должен работать этот метод. Вот мой код, который получился для решения задачи:
(function(obj) {
    function Request(action, params) {

        var that = this;

        for (var key in params) {
            if (params.hasOwnProperty(key))
                that[key] = params[key];
        }

        function updateParams() {
            for (var key in params) {
                if (params.hasOwnProperty(key) && that.hasOwnProperty(key))
                    params[key] = that[key];
            }
        }

        this.get = function(callback) {
            updateParams();
            action(params, callback);
        };
    }

    obj.RequestSomething = function() {
        return new Request(controller.selectSomethings, {
            key:  "",
            key1:  "",
            key2:  "defaultValue"
        });
    };

    obj.RequestCircle = function() {
        return new Request(controller.selectCircles, {
            radius:  0,
            x:  0,
            y:  0
        });
    };
})(testObj || testObj = {});

var rq = testObj.RequestSomethings();
rq.key1 = "test";
rq.get(function() { console.log(arguments); });


Мой вопрос состоит в том, как правильно это реализовать, используя prototype или иным способом, который считается общепринятым. То есть нужно, чтоб у объектов был общий интерфейс, но каждый имел свою реализацию.
  • Вопрос задан
  • 2623 просмотра
Пригласить эксперта
Ответы на вопрос 2
ghaiklor
@ghaiklor
NodeJS TechLead
Вам нужно смотреть в сторону inheritance patterns, если я правильно понял вопрос. Они позволяют задать один объект с прототипом и затем создавать другие объекты с прототипами, расширяясь атрибутами и прототипом первого.
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы