美文网首页ES6
ES6基本的语法(九) @decortor 装饰器

ES6基本的语法(九) @decortor 装饰器

作者: StevenTang | 来源:发表于2021-02-10 01:59 被阅读0次

@decortor 装饰器

装饰器的本质还是一种函数

修饰私有属性


class Fun {
    constructor(){
        this.keyValue = ''
    }
    @name
    myName = 'ccc';
}

function name(proto, key, descriptor){
    console.log(proto, key, descriptor)
    // console.log(原型, 属性, descriptor)
    // descriptor 和之前说的 Object.defineproperty 一样是描述符
    // 四个属性
    configurable // 配置
    enumerable  // 枚举
    writable    // 写入
    // 前面三个不做介绍

    initializer // 属性值 
    console.log(descriptor.initializer) // 输出 "ccc"
    
    // 修改 initializer
    descriptor.initializer = function(){
        return "xxx"
    }
}


var fun = new Fun() // 不 new 修饰器里面的方法都可以执行

console.log(fun.myName) // 输出 "xxx"

修饰原型上的属性


class Fun {
    constructor(){
        this.keyValue = ''
    }
    @myCount
    getCount(){
        console.log('发送请求')
    }

    @myBox
    box=()=>{
        console.log('发送请求')
    }
}

function myCount(proto, key, descriptor) {
    console.log(proto, key, descriptor)
    // console.log(原型, 属性, descriptor)
    // descriptor 和之前说的 Object.defineproperty 一样是描述符
    // 四个属性
    configurable // 配置
    enumerable  // 枚举
    writable    // 写入
    // 前面三个不做介绍

    value // 方法体
    console.log(descriptor.value) // 就是 getCount() 这个方法体
    
    // 修改 value
    descriptor.value = function(){
        console.log("666");
        console.log(this); // 输出的是 fun
    }
}

function box (){
    // 箭头函数的时候 
    console.log(proto, key, descriptor)
    // console.log(原型, 属性, descriptor)
    // descriptor 和之前说的 Object.defineproperty 一样是描述符
    // 四个属性
    configurable // 配置
    enumerable  // 枚举
    writable    // 写入
    // 前面三个不做介绍
    // 还是 initializer
    initializer // 属性值 
    
}

var fun = new Fun() 

console.log(fun.getCount()) // 输出 666

上面的代码中在装饰原型上面的方法的时候 initializer 会变成 value,会指向被装饰的方法体,可以通过去 descriptor.value=fun(){} 的方式去修改。

装饰类


@boxs
class box {
    constructor (){
        console.log("我是constructor")
    }
}

function boxs (target) {
    target.name = "ccc" // 可以这样子直接加属性
}

相关文章

  • ES6基本的语法(九) @decortor 装饰器

    @decortor 装饰器 装饰器的本质还是一种函数 修饰私有属性 修饰原型上的属性 上面的代码中在装饰原型上面的...

  • [Python]装饰器使用

    兼容参数版: 非语法糖装饰器 基本语法糖装饰

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • es6超好用的语法糖Decorator

    Decorator(修饰器/装饰器)是es6提出的语法糖,用于修改类的行为。不过目前主流浏览器都没有很好的支持,我...

  • [Decorator] 学习

    # Javascript 中的装饰器 # ES6 系列之我们来聊聊装饰器

  • 循序渐进Python装饰器(二)

    我们继续讲解Python装饰器。上一讲我们把装饰器的基本原理讲了,这一讲我们来谈谈装饰器相关的语法。 1. @是语...

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

  • TypeScript 装饰器

    TypeScript 与 ES6 的装饰器? ES6 的装饰器是一种函数,写成@ + 函数名。它可以放在类和类方法...

  • 装饰器

    装饰器属于python高级语法,吉多创始的装饰器也是很精妙,通常我们会把装饰器称作语法糖。就好比,一颗树原本只有树...

  • 透析Python装饰器--透过现象看本质

    》眼花缭乱 Python的装饰器(也称语法糖)大致分为这几类: 无参数装饰器 有参数装饰器 装饰类的装饰器 无参数...

网友评论

    本文标题:ES6基本的语法(九) @decortor 装饰器

    本文链接:https://www.haomeiwen.com/subject/xkehxltx.html