Decorator
(修饰器/装饰器)是es6提出的语法糖,用于修改类的行为。不过目前主流浏览器都没有很好的支持,我们需要用babel来转换为浏览器能识别的语言。在这篇文章中将介绍decorator
的基础用法和一些应用实例。
1.修饰类
(1) 基础用法
target.isTestable=true
}
console.log(MyClass.isTestable) // true
贴一下babel转换后的代码,
function testable(target) {
target.isTestable = true;
}
也可以在prototype上修改属性,也可以为修饰器添加多个参数。
function testable(status){
return target=>{target.prototype.isTestable=status}
}
console.log('MyClass.isTestable',MyAnotherClass.prototype.isTestable) // false
当然我们通过修饰器,把某个对象的方法添加到目标类的实例上,注意要在类的prototype上添加。
@testable(foo)
class MyAnotherClass{}
const obj=new MyAnotherClass()
console.log('MyClass.isTestable',obj.isTestable) // true
(2) 应用
在React App
的开发中,使用redux
通常需要react-redux
中的connect
方法,将两者结合在一起。通常的写法是:
如果使用decorator
,代码可读性更高了一些。
2.修饰方法
(1).基础用法
class MyClass{
@readonly
print(){console.log(a:${this.a}
)}
}
(2).js中Object的属性
<div class="jb51code">
<pre class="brush:js;">
var person = {}
Object.defineProperty(person,'name',{
configurable:false,//能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
writable:false,//对象属性是否可修改,flase为不可修改,默认值为true
value:'xiaoming' //对象属性的默认值,默认值为undefined
});