前端装饰器

本文探讨了JavaScript中的装饰器,作为一种不侵入原有代码的修饰手段,它能够为类、方法和属性添加额外行为。通过实例解释了如何使用装饰器来扩展方法的功能,如在`run`方法中添加输出速度的逻辑,同时介绍了装饰器的实现原理,包括获取和修改对象属性的方法。文章还预告了对ES7中Decorator的进一步讨论。
摘要由CSDN通过智能技术生成

1、javascript中的装饰器

装饰器是对类、方法、属性的修饰,增加额外的行为。装饰器不侵入,所以对原先的内容不会破坏。装饰器可以理解成一种解决问题的通用思路,装饰器模式遇到程序之后诞生了多种多样的表现形式。javascript也引入了装饰器这一实验内容,在typescript中已经有使用的案例。

这篇博客记录方法的装饰器,先梳理下装饰器的思路。比如有一个run方法,原先的run方法只是简单输出I am running。

class Run {
    constructor() {

    }
    run() {
        console.log( 'I am running' );
    }

}

接着,希望run方法能输出跑步的速度。最直接的方法是修改Run的run方法,输出速度。我们采用另外一种思路,形式上不修改Run。主要是通过Object.getOwnPropertyDescriptor获取类的方法属性,并修改方法,最后使用Object.defineProperty覆盖原先的方法。


function decorateFunc( Cls, funcNm ) {

    // 获取需要包装的target

    let target = Cls.prototype;

    // 获取属性的descriptor

    let descriptor = Object.getOwnPropertyDescriptor( target, funcNm );

    // 装饰函数

    let decoratedFunc = function ( ...args ) {

        let speed = 12;

        d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值