1.什么是装饰器
装饰器是最新的ECMA中的一个提案,是一种与类(class)相关的语法,
用来注释或修改类和类方法
eg:classPerson{
@readonly count=0;
}
@readonly将count设置成了已读属性
因为装饰器是最新的提案,所以浏览器还未支持装饰器,但是typescript早期
TypeScript早些时候已经支持Decorators的使用,而且提供了ES5的支持,
所以虽然Decorators是ES7才支持的新特性,但是借助Babel和TypesScript,
我们现在就可以使用它了
运行环境配置:
需要安装ts运行环境,通过ts--init初始化目录就会出现ts-config文件,在ts-config
文件中需要打开"experimentalDecorators":true,也可以直接通过某种命令写入,有
的电脑上的vscode可能需要在设置中将ts的decorators选项勾选才能正常运行,如果
提示无法运行脚本则需要以管理员在powshell中运行set-ExecutionPolicyRemoteSigned,勾选a或者y
2.装饰器模式
1.装饰器:装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时
又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,
提供了额外的功能。
2.目的:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为
灵活。
3.主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并
且随着扩展功能的增多,子类会很膨胀。
4.使用场景:1.我们在不想增加很多子类的情况下去扩展类的话,可以使用装饰器,
2.扩展一个类的功能。
3.动态增加功能,动态撤销。
如何解决:我们将功能职责进行划分,同时继承装饰器模式
5.优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式
可以动态扩展一个实现类的功能。
缺点:多层装饰比较复杂
7.可代替继承
3.装饰器种类
1.函数装饰器
1.使用函数装饰器,我们可以控制函数的输入和输出。
2.定义:MethodDecorator=(target:Object,key:string,descriptor:TypedPropertyDescriptor)=>TypedPropertyDescriptor|Void;
target:被装饰的对象
key:被装饰的函数名
descriptor->被传递过来的属性的属性描述符.可以通过Object.getOwnPropertyDescriptor()方法来查看属性描述符。
3.函数装饰器核心是修改描述符(可以说装饰器的本质就是修改描述符)
简单来讲,属性描述符可以用来配置一个对象的某个属性的返回值,
get/set行为,是否可以被删除,是否可以被修改,是否可以被枚举
等特性。
4.属性描述符
value–>字面值或者函数/属性计算后的返回值。
enumerable->是否可以被枚举(是否可以在(forxinobj)循环中被枚举出来)
configurable–>属性是否可以被配置
writable->属性是否是可写的.
5.注意事项
1.装饰器在class被声明的时候被执行,而不是class实例化的时候。
2.方法装饰器(函数装饰器也叫方法装饰器),方法装饰器返回一个值
3.存储原有的描述符并且返回一个新的描述符是我们推荐的做法.这在多描述符应用的场景下非常有用。
4.设置描述符的value的时候,不要使用箭头函数。
2.属性装饰器
1.属性装饰器和方法装饰器很类似,通过属性装饰器,我们可以用来重新定义getters、setters,修改enumerable,configurable等属性。
2定义:PropertyDecorator=(target:Object,key:string)=>void;
target:属性拥有者
key:属性名
3.可以修改属性
3.class装饰器
1.class装饰器是通过操作class的构造函数,来实现对class的相关属性和方法的动态添加和修改
2.定义:ClassDecorator = (target: TFunction) => TFunction;
classDecorator只接收一个参数就是class的构造函数
分支主题
分支主题
分支主题
分支主题
分支主题
tapd中第一项
新建组合装-添加sku,模糊搜索
修改时一共涉及的地方:
2.设置模块
平台策略-->赠品策略(右上角编辑) ---> 新建规则 --> 赠品策略明细抽屉(执行动作右侧的添加赠品)
tapd第二项
平台货品-手动匹配-单品
一共涉及的地方
1.货品档案
平台货品-->手动匹配--单品(同tapd)
条码管理-->新建-->选择单品
2.库存货品
外部仓储货品-->匹配系统货品
此项和tapd第四项 订单未匹配-匹配系统sku-单品 修改的是同一个地方
tapd第三项
平台货品-手动匹配-组合装
一共涉及的地方
1.货品档案
平台货品-->手动匹配--组合装(同tapd)
条码管理-->新建-->选择组合装
此项和tapd第四项 订单未匹配-匹配系统sku-组合装 修改的是同一个地方
tapd第五项
订单待处理 行内换货-添加sku
一共涉及的地方
1.订单待处理 行内换货-添加sku
2.手工建单-添加货品/添加赠品-选择单品
3.订单详情 -->商品信息(编辑)-->添加货品 /添加增品选择单品
4.订单待处理-批量添加赠品-添加赠品
tapd第六项
订单待处理-行内换货-添加组合SKU
一共涉及的地方
1.订单待处理 行内换货-添加组合sku
2.手工建单-添加货品-选择组合装
3.订单详情 -->商品信息(编辑)-->添加货品---选择组合装
tapd第七项
采购-供货关系-全部、i按下供应商、1688供应商-添加sku
无其他涉及的地方
tapd第八项
采购管理-编辑中-编辑-添加sku
一共涉及的地方
订单:批量采购
采购管理:新建、编辑、再次购买
采购建议:备货建议、缺货建议生成采购单
3.注意构造函数只会被调用一次
4.对类的相关属性和方法的动态添加和修改
4.参数装饰器
1.参数装饰器更多的是被用来标记特殊的参数,而不是修改参数,事实上参数装饰器往往用来对特殊的参数进行标记,如何再fang
2.参数装饰器要结合装饰器来使用
5.访问器装饰器
1.访问器不过是类声明中属性的读取访问器和写入访问群
2.访问器装饰器应用与访问器的属性描述符,可以用于观测、修改、替换访问器的定义
3.注意:typeScript不允许同时装饰单一成员的get和set访问器,相反,所有成员的装饰器必须应用与首个指定的访问器(根据文档顺序)。这是业务装饰器应用与属性描述符,属性描述符结合了get和set访问器而不是应用于每项声明