关于es6:es6装饰器

42次阅读

共计 1313 个字符,预计需要花费 4 分钟才能阅读完成。

配置

babel 依赖包


"devDependencies": {

"@babel/cli": "^7.11.6",

"@babel/core": "^7.11.6",

"@babel/preset-env": "^7.11.5",

"@babel/plugin-proposal-decorators": "^7.10.5",

"@babel/plugin-proposal-class-properties": "^7.10.4"

}

babel.config


// .babelrc

{

"presets":["@babel/preset-env"],

"plugins": [["@babel/plugin-proposal-decorators", { "legacy": true}],

["@babel/plugin-proposal-class-properties", { "loose" : true}]

]

}

编译文件


"scripts": {"start": "npx babel app.js -o index.js -w"}

类装璜器

新增办法


@flag

class Animal {constructor(name) {this.name = name;}

sayHi() {console.log(this.getName()+"say:'hi'")

}

}

  

function flag(constructor) {constructor.prototype.getName = function(){return this.name}

}

  

let monkey = new Animal("monkey");

monkey.sayHi();

  

传参


@flag({specie:"mammal"})

class Animal {constructor(name) {this.name = name;}

sayHi() {console.log(this.getName()+"say:'hi'")

}

}

  

function flag(params) {console.log(params);

return (constructor)=>{constructor.prototype.getName = function(){return this.name}

}

}

办法装璜器


@flag

class Animal {constructor(name) {this.name = name;}

@before

sayHi() {console.log(this.getName()+"say:'hi'")

}

}

  

function flag(constructor) {constructor.prototype.getName = function () {return this.name}

}

  

function before(target,property,descripot){

let oldMthod = descripot.value;

descripot.value = function(){console.log("before exect");

oldMthod.call(this, ...arguments);

}

}

  

let monkey = new Animal("monkey");

monkey.sayHi();

正文完
 0