ES6-修饰器
首先放一段示例代码
@testable
class MyTestableClass {// ...}function testable(target) {
target.isTestable = true;
}MyTestableClass.isTestable // true
【ES6-修饰器】代码中@testable即为一个修饰器。可以看到,修饰器本质上是一个函数。将类作为修饰器函数的参数传入到函数内部,在函数内部为类挂载了属性与方法。
除了在类上使用修饰器外,还可以在类内部属性上使用修饰器。示例如下:
class Person {
@readonly
name() { return `${this.first} ${this.last}` }
}
这个很好理解,表明Person类中的name属性是只读的。
那么readonly修饰器函数是怎样的呢?
function readonly(target, name, descriptor){// descriptor对象原来的值如下// {//value: specifiedFunction,//enumerable: false,//configurable: true,//writable: true// };
descriptor.writable = false;
return descriptor;
}readonly(Person.prototype, 'name', descriptor);
当修饰器作用到类属性上时,实则将类原型作为对象传入到了修饰器函数内部,第二个参数即为作用的类属性名,第三个参数是该属性的一些默认属性。修改默认属性即可控制该类属性的一些行为(比如说是否可复写该方法等)。
修饰器的两种使用方法就是上面这些了。
注意,我们提到修饰器实则就是一个函数,所以,遇到React中的这种写法也就很好理解了
@connect(mapStateToProps, mapDispatchToProps)
function connect(mapStateToProps,mapDispatchToProps){
return function(){}
}
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 人生感悟记#环境仪器宋庆国成长记#072
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 视频转换器哪种好用()
- NeuVector 会是下一个爆款云原生安全神器吗()
- 操作系统|[译]从内部了解现代浏览器(1)
- 探索免费开源服务器tomcat的魅力
- 机器学习|机器学习 Andrew Ng《Machine Learning》课程笔记1
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- 机器学习一些简单笔记