Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function Component() {
this.fn1 = function(val) { alert("Component > fn1 " + val); };
this.fn2 = function(val) { alert("Component > fn2 " + val); };
}
function IDecorator() {
var dublicate = this;
var component;
this.setComponent = function(val) {
component = val;
for (var key in val) {
if (typeof(val[key])=="function") {
addMethod(key, val[key]);
}
}
};
this.getComponent = function() {
return component;
};
this.applyComponentMethod = function(name, argsArray) {
if (typeof(component[name])=="function") {
component[name].apply(dublicate, argsArray || []);
}
};
function addMethod(name, componentFn) {
dublicate[name] = function() {
return componentFn.apply(this, arguments || []);
}
}
}
function MyDecorator(component) {
var dublicate = this;
IDecorator.call(this);
this.setComponent(component);
this.fn1 = function(val) {
alert("MyDecorator > fn1 " + val);
dublicate.applyComponentMethod("fn1", [val]);
};
}
var c = new Component();
var d = new MyDecorator(c );
d.fn1(1); // "MyDecorator > fn1 1", "Component > fn1 1"
d.fn2(2); // "Component > fn2 2" и не думаю, что это хорошо
JS — клиентский язык
Если говорить о серверном применении, естественно нам безразличен размер скриптов и интересует возможность расширения.
данный пример не пригоден за рамками академического интереса.
JS — клиентский язык
Все компоненты должны иметь одинаковый интерфейс,
Реализация паттерна декоратор на JS