類的修飾
? ? ? ? 修飾器(Decorator)是一個函數(shù),用來修改類的行為。這是ES7的一個提案,目前Babel轉(zhuǎn)碼器已經(jīng)支持。
? ? ? ? 修飾器對類的行為的改變,是代碼編譯時發(fā)生的,而不是在運行時。這意味著,修飾器能在編譯階段運行代碼。
1、只讀的修飾器
{
? ? ? ? ? let readonly=function(target,name,descriptor){
? ? ? ? ?descriptor.writable=false;returndescriptor
};
? class Test{
? ?@readonly
? ? ? ? ? time(){return‘2017-07-20‘}
}
let test=newTest();
?//test.time=function(){
//console.log(‘reset time‘);
//}; 將報錯? 如果修改的話console.log(test.time());
}
也可以在類的前面進行修飾
{
? ? ?let typename=function(target,name,descriptor){
? ? ?target.myname=‘hello‘;
}
@typename
? class Test{
}
? ? console.log(‘類修飾符‘,Test.myname);//hello
? ?//第三方庫修飾器的js庫:core-decorators; npm install core-decorators}
{
? ? ? let log=(type)=>{returnfunction(target,name,descriptor){
? ? ? let src_method=descriptor.value;
? ? ?descriptor.value=(...arg)=>{
? ? ?src_method.apply(target,arg);
? ? console.info(`log ${type}`);
}
}
}
class AD{
? ? ?@log(‘show‘)
show(){
? ? console.info(‘a(chǎn)d is show‘)
}
? ?@log(‘click‘)
? ?click(){
? ?console.info(‘a(chǎn)d is click‘);
}
}
? ?let ad=newAD();
? ?ad.show();
? ?ad.click();
}