Typescripts装饰器类,instanceof引用类型,typeof值类型,as断言(类型转换)等类型判断 for(const * of *) for(let *in *) protoType

装饰器 TypeScript 官网API https://www.tslang.cn/docs/home.html

@property 也是 cocoecreator自带的装饰器类 所以下面就可以用 set SortingOrder(order: LayerOrder) {}来接收枚举类型了

@property({ visible: false })
private sortingOrder: LayerOrder = LayerOrder.Normal;

@property({ type: cc.Enum(LayerOrder), displayName: "显示层级" })
set SortingOrder(order: LayerOrder) {
    this.sortingOrder = order

    if (CC_EDITOR) {
        let comp = this.node.getComponent(LayerExtend)
        if (order === LayerOrder.Scene) {
            if (!comp) {
                comp = this.node.addComponent(LayerExtend)
            }
            this._adapterScreen = true
        } else {
            if (comp) {
                this.node.removeComponent(LayerExtend)
            }
            this._adapterScreen = false
        }

        if (order >= LayerOrder.Model && order < LayerOrder.Scene) {
            this._isModelLayer = true
            this._blurBack = true
            this._clickToClose = true
            this._enableShowAnimation = true
            this._enableHideAnimation = true
        }
        else if (order === LayerOrder.Normal) {
            this._blurBack = false
            this._isModelLayer = false
            this._enableShowAnimation = false
            this._enableHideAnimation = false
        }
    }
}
get SortingOrder() {
    return this.sortingOrder
}

//************************** 调试 ********************************//
创建一个test.ts脚本
吧代码放到 test.ts 脚本里面
在终端(T) 新终端里运行 tsc test.ts --experimentalDecorators 可以把test.ts 生成test.js
在终端(T) 新终端里运行 node test.js 运行出test.js 的 代码输出结果

	//有return 的时候,返回的就是 **重写了**   @装饰器  下面所修饰的方法  ,
	//@在类前面就是修饰return     **重写了**  构造方法 
	//如果没有          return        就是自己单独的一个装饰器方法

//************************** 装饰器是一种特殊类型的声明 ********************************//
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为。

  • 通俗的讲装饰器就是一个方法,可以注入到类、方法、属性参数上来扩展类、属性、方法、参数的功能。

  • 常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器、访问器装饰器

  • 装饰器的写法:普通装饰器(无法传参) 、 装饰器工厂(可传参)

  • 装饰器是过去几年中js最大的成就之一,已是Es7的标准特性之一

类装饰器

类装饰器在类声明之前被声明(紧靠着类声明)。
 类装饰器  应用于 类构造函数,
 	可以用来监视,修改或替换类定义。
  1. 普通装饰器(无法传参)
        function logClass(target:any){
         
    
            console.log(target);
            // target 就是当前类
            target.prototype.apiUrl='动态扩展的属性';
            target.prototype.run=function(){
         
                console.log('我是一个run方法');
            }
        }
    
        @logClass//后面不可以加分号
        class HttpClient{
         
            constructor(){
         
            }
            getData(){
         
    
            }
        }
        var http:any=new HttpClient();
        console.log(http.apiUrl);
        http.run();
    
    

//运行结果
[Function: HttpClient]
动态扩展的属性
我是一个run方法
```

  1. 装饰器工厂(可传参)
        function logClass(params:string){
         
            return function(target:any){
                                                 //有return 的时候,返回的就是 **重写了**   @装饰器  下面所修饰的方法  ,
            																					//@在类前面就是修饰return     **重写了**  构造方法 
            																					//如果没有          return        就是自己单独的一个装饰器方法
                console.log(target);//类Client
                console.log(params);//传进来的参
                target.prototype.apiUrl=params;
            }
        }
    
        @logClass('hellow')//后面不可以加分号
        class HttpClient{
         
            constructor(){
         
            }
    
            getData(){
         
    
            }
        }
    
        var http:any=new HttpClient();
        console.log(http.apiUrl);
    

//运行结果
[Function: HttpClient]
hellow
hellow
```

  1. 重载构造函数
        function logClz(target:any) {
         
            return class extends target {
         
                url = 'change url'
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值