前端装饰器

今天和公司同事去做核酸的路上闲聊,便聊到了刚才他面试问新员工的一个问题:装饰器。我对它算是比较陌生的。之前也没有接触过,在我从它的字面意思的理解上认为:“它可能是一层对方法的装饰,就和Vue中的路由钩子差不多,在跳转路由前走一遍,做一些判断的逻辑操作之类的”。然后同事给我劈里啪啦一顿讲,我也听的懵懵的。回去后仔细看了,简单的介绍下装饰器


简介

pythod之类的语言中装饰器很早就出现了,而对JavaScript中的装饰器的支持仍处于第 2 阶段提案中,我们需要使用babel将代码转为ES5或者ES6才可以使用。
当我们需要在多个不同的类之间共享或者扩展一些方法或行为的时候,代码会变得错综复杂,极其不优雅,这也就是装饰器被提出的一个很重要的原因。

Javascript 中的装饰器

总的来说,我们可以在 JavaScript 中分出 3 种类型的装饰器:

类装饰器—— 一次应用于整个类。

类成员装饰器(属性装饰器)——应用于类的成员

函数装饰器——用函数来包装函数。

装饰器的具体表现

  • 类装饰器只接收一个参数类本身
function add(target){
	 target.prototype.age = 22
}
@add(50)
class person {
    name = ''
    constructor(name) {
        this.name = name
    }
}
const stu = new person('Tom')
console.log(stu.name)	// Tom
console.log(stu.age)	// 22
  • 属性装饰器接收三个参数
    1、target - 成员所在的类。
    2、name - 类成员的名称。
    3、descriptor - 成员描述符。
function readonly(target, name , descriptor){
    descriptor.writable = false
}
class person {
    @readonly
    sub(){
        console.log('我是sub')
    }
}
const stu = new person('dw')
stu.sub = ()=>{
    console.log('ads')
}
stu.sub()	// TypeError: Cannot assign to read only property 'sub' of object '#<person>'
  • 函数装饰器
    函数是不能使用直接使用装饰器,因为函数存在函数提升的特性。但是我们可以使用高阶函数来实现装饰器 的功能。
function multiply(x, y) {
    console.log('total : ' + (x * y));
}
function logDecorator(logger) {
    return function () {
        return logger.apply(this, arguments);
    }
}
const wrapperFunction = logDecorator(multiply);
wrapperFunction(10,10)

总结

装饰器引入 JavaScript 的主要目的是在 JavaScript 类和类属性之间共享功能。
但是,这并不是装饰器带来的唯一优势。
装饰器允许开发人员编写干净且可重用的代码。开发人员可以使用装饰器轻松地将功能的增强与代的码特性分开。
除此之外,装饰器语法非常简单,允许在不增加代码复杂性的情况下向类和属性添加新功能。
这使得代码更易于维护和调试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值