首页 Javascript 正文
225

Javascript装饰者模式的实现

  • yiqingpeng
  • 2019-01-07
  • 0
  •  
装饰者模式的最大好处就是在对象的原有行为不发生改变的情况下,对其行为进行包裹,以扩展其原有行为的功能。下面讨论javascript中两种实现装饰器的方法:

1、使用继承:
function Foo(){
}
Foo.prototype.doSomething = function(){
    console.log('Foo method was called');
};
function Decorator(){
    Foo.apply(this, arguments);
}
Decorator.prototype = Object.create(Foo.prototype);
Decorator.prototype.constructor = Decorator;
Decorator.prototype.doSomething = function(){
    console.log('Before');
    return Foo.prototype.doSomething.apply(this, arguments);//被装饰的方法
};
var obj = new Decorator();
obj.doSomething(); 
2、AOP(面向切面)方法:
function Bar(){
}
Bar.prototype.doSomething = function (){
    console.log("Bar's method was called");
};
function Decorator(obj, method){
    var origMethod = obj[method];
    obj[method] = function(){
        console.log('Before');
        var ret = origMethod.apply(this, arguments);
        console.log('After');
        return ret;
    };
}
var bar = new Bar();
Decorator(bar, 'doSomething');
bar.doSomething();

正在加载评论...