Typescript get 和 set 的重写

之前写cocos-JS  调试的时候,有个属性,不知道在引擎,或者代码哪里哪里修改的,会用set 包装一下属性,然后调试,就能找出所有重写的地方。后来用了creator, 版本升级之后也都是Ts的代码,发现所有的属性,已经都是get,set 包装过了,这时候,调试的函数就得改改了

namespace DebugUtil {

    /** 
     *  用与重写get set 函数在调试中快捷设置,然后断点调试
     * 
     *  事例:
     *  DebugUtil.rewriteProperty(this._group, "scrollV", function (value) {
     *      console.log(value);   //断点打在这里
     *  })
     */

    export function rewriteProperty(thisObj, property: string, setterFunc: Function = null) {
        let getFunction = function (type: string = "get"): Function {
            let d = Object.getPrototypeOf(this);
            if (d == null) {
                return;
            }
            while (!d.hasOwnProperty(property)) {
                d = Object.getPrototypeOf(d);
                if (d == null) {
                    return;
                }
            }
            if (type == "get") {
                return Object.getOwnPropertyDescriptor(d, property).get;
            }
            else {
                return Object.getOwnPropertyDescriptor(d, property).set;
            }
        }

        Object.defineProperty(thisObj, property, {
            get: function () {
                let getF = getFunction.call(this, "get");
                if (getF) {
                    return getF.call(this);
                }
            },
            set: function (value) {
                let setF = getFunction.call(this, "set");
                if (setF) {
                    setF.apply(this, [value]);
                    if (setterFunc) {
                        setterFunc(value);
                    }
                }
            },
            enumerable: true,
            configurable: true
        });
    }




}

粘贴在这里记录一下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值