这篇文章主要讲解了“JavaScript装饰器模式怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript装饰器模式怎么用”吧!
装饰器模式想必大家并不陌生:它允许向一个现有的对象添加新的功能,同时又不改变其结构,属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
在 JS 中,装饰器(Decorator
)是ES7中的一个新语法,它可以对类、方法、属性
进行修饰
,从而进行一些相关功能定制。它的写法与Java的注解(Annotation
)非常相似,但是功能还是有很大区别。
代码示例:
不使用装饰器:
const log = (srcFun) => { if(typeof(srcFun) !== 'function') { throw new Error(`the param must be a function`); } return (...arguments) => { console.info(`${srcFun.name} invoke with ${arguments.join(',')}`); srcFun(...arguments); } } const plus = (a, b) => a + b; const logPlus = log(plus); logPlus(1,2); // plus invoke with 1,2
使用装饰器:
const log = (target, name, descriptor) => { var oldValue = descriptor.value; descriptor.value = function() { console.log(`Calling ${name} with`, arguments); return oldValue.apply(this, arguments); }; return descriptor; } class Math { @log // Decorator plus(a, b) { return a + b; } } const math = new Math(); math.plus(1, 2); // Calling plus with 1,2
从上面的代码可以看出,如果有的时候我们并不需要关心函数的内部实现,仅仅是想调用它的话,装饰器能够带来比较好的可读性,使用起来也是非常的方便。
// readonly 装饰器 import { readonly } from 'core-decorators'; class Fudao { @readonly title = 'A'; } var fudao = new Fudao(); fudao.title = 'B'; // This will log error & doesn't work
JS中的装饰器本质也是一个函数,利用的是JS中object
的descriptor
;
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
感谢各位的阅读,以上就是“JavaScript装饰器模式怎么用”的内容了,经过本文的学习后,相信大家对JavaScript装饰器模式怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。