You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{readonly}from'core-decorators';classMeal{
@readonlyentree='steak';}vardinner=newMeal();dinner.entree='salmon';// Cannot assign to read only property 'entree' of [object Object]
import{deprecate}from'core-decorators';classPerson{
@deprecatefacepalm(){}
@deprecate('功能废除了')facepalmHard(){}}letperson=newPerson();person.facepalm();// DEPRECATION Person#facepalm: This function will be removed in future versions.person.facepalmHard();// DEPRECATION Person#facepalmHard: 功能废除了
一、介绍
Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式
简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。
ES6
中Decorator
功能亦如此,其本质也不是什么高大上的结构,就是一个普通的函数,用于扩展类属性和类方法这里定义一个士兵,这时候他什么装备都没有
定义一个得到 AK 装备的函数,即装饰器
使用该装饰器对士兵进行增强
这时候士兵就有武器了
上述代码虽然简单,但也能够清晰看到了使用
Decorator
两大优点:二、用法
Docorator
修饰对象为下面两种:类的装饰
当对类本身进行装饰的时候,能够接受一个参数,即类本身
将装饰器行为进行分解,大家能够有个更深入的了解
下面
@testable
就是一个装饰器,target
就是传入的类,即MyTestableClass
,实现了为类添加静态属性如果想要传递参数,可以在装饰器外层再封装一层函数
类属性的装饰
当对类属性进行装饰的时候,能够接受三个参数:
首先定义一个
readonly
装饰器使用
readonly
装饰类的name
方法相当于以下调用
如果一个方法有多个装饰器,就像洋葱一样,先从外到内进入,再由内到外执行
外层装饰器
@dec(1)
先进入,但是内层装饰器@dec(2)
先执行注意
装饰器不能用于修饰函数,因为函数存在变量声明情况
编译阶段,变成下面
意图是执行后
counter
等于 1,但是实际上结果是counter
等于 0三、使用场景
基于
Decorator
强大的作用,我们能够完成各种场景的需求,下面简单列举几种:使用
react-redux
的时候,如果写成下面这种形式,既不雅观也很麻烦通过装饰器就变得简洁多了
将
mixins
,也可以写成装饰器,让使用更为简洁了下面再讲讲
core-decorators.js
几个常见的装饰器@antobind
autobind
装饰器使得方法中的this
对象,绑定原始对象@readonly
readonly
装饰器使得属性或方法不可写@deprecate
deprecate
或deprecated
装饰器在控制台显示一条警告,表示该方法将废除参考文献
The text was updated successfully, but these errors were encountered: