之前写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
});
}
}
粘贴在这里记录一下