修饰器是一个函数,用来修改类的行为(扩展类的功能)
{
let readonly = function (target, name, descriptor) {
descriptor.writable = false;
return descriptor;
};
class Test {
@readonly
time() {
return "2020-04-06";
}
}
let test = new Test();
// test.time = function () {
// console.log("reset time");
// };
console.log(test.time()); // 2020-04-06
}
{
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) => {
return function (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("ad is show");
}
@log("click")
click() {
console.info("ad is click");
}
}
let ad = new AD();
ad.show();
// ad is show
// log show
ad.click();
// ad is click
// log cick
}