Decorator
装饰器模式为了让不修改原类的情况下表现的更好,我们可以给方法加上装饰器,也可以给类加上装饰器。参考自(文章)[http://taobaofed.org/blog/2015/11/16/es7-decorator/]
装饰方法
装饰器需要 3 个参数,target,key,descriptor,这个跟 Object.defineProperty 的效果一样的。
function decorateLight(target, key, descriptor) {
const method = descriptor.value;
/*let moreAtk = 50;*/
let ret;
descriptor.value = (...args)=>{
/*args为入参,想做什么,自己定义就好了*/
/*args[1] += moreAtk;*/
ret = method.apply(target, args);
return ret;
}
return descriptor;
}
装饰类
function addFly(canFly){
return function(target){
target.canFly = canFly;
let extra = canFly ? '(技能加成:飞行能力)' : '';
let method = target.prototype.toString;
target.prototype.toString = (...args)=>{
return method.apply(target.prototype,args) + extra;
}
return target;
}
}
写的言简意赅,让人直接就想用啊!
使用起来确实挺好用的,就是 decorator 的抽离挺难控制的。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
文章标题:Decorator
文章字数:211
本文作者:泽鹿
发布时间:2019-08-28, 16:45:23
最后更新:2019-08-28, 20:05:45
原始链接:http://panyifei.github.io/2019/08/28/前端技术/js/框架以及规范/ECMAScript6/Decorator/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。