es7装饰器小入门

es7 装饰器 简单梳理

安装
npm i babel-plugin-transform-decorators-legacy babel-register --save-dev
安装:
babel-plugin-transform-decorators-legacy 
babel-register

transform-decorators-legacy:
是第三方插件,用于支持decorators

babel-register:
用于接入node api
运行方法一:命令行操作

babel --plugins transform-decorators-legacy input.js>input.es5.js
然后直接运行es5的代码
运行方法二:require hook

require('babel-register')({
    plugins: ['transform-decorators-legacy']
});
require("./input.js")
1.声明一个装饰器函数
 function decorate(target, key, descriptor) {
	 const method = descriptor.value;
	 let newCounr= 10;
	 let ret;
	 descriptor.value = (...args)=>{
	 args[0] += newCounr;
	 ret = method.apply(target, args);
	 return ret;
	 }
	 return descriptor;
}



class Count{
	 constructor(a= 1 ,b = 2,c = 3){
	 this.init(a,b,c);
	 }
	@decorate
	 init(a,b,c){
	 this.a= a; 
	 this.b= b; 
	 this.c= c; 
	 }
	 toString(){
	 return `a:${this.a},b:${this.b},c:${this.c}`;
	 }
}

var count= new Count();

// 假如不加 @decorate
// 输出:console.log(`当前 ===> ${count}`);
// 输出:当前===> a:1,b:2,c:3
// 添加 @decorate
// 输出:console.log(`当前 ===> ${count}`);
// 输出:当前===> a:11,b:2,c:3
装饰器函数参数固定为这个三个 参照object原型函数
Object.defineProperty
2.自身调用
function newD(value){
return function (target) {
        target.text = value;
    }
}
@newD("文本1")
class Text1 { }

@newD("文本2")
class Text2 { }

console.log(Text1.call);
console.log(Text2.call);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值