在Javascript中设计Watch工具

时间:2016-08-04 21:38:03

标签: javascript

我正在考虑添加在我的代码库中观察变量的功能,我发现this answer几乎可以完成我需要的所有操作。答案提供的代码如下:

$('.close').click(function(){
    $(this).closest('#Model').hide()
});

观看'变量,您可以使用:console = console || {}; // just in case console.watch = function(oObj, sProp) { sPrivateProp = "$_"+sProp+"_$"; // to minimize the name clash risk oObj[sPrivateProp] = oObj[sProp]; // overwrite with accessor Object.defineProperty(oObj, sProp, { get: function () { return oObj[sPrivateProp]; }, set: function (value) { //console.log("setting " + sProp + " to " + value); debugger; // sets breakpoint oObj[sPrivateProp] = value; } }); }

但是,我想知道是否可以添加' unwatch'撤消上述方法?如果是这样,怎么办呢?

2 个答案:

答案 0 :(得分:1)



DocumentBuilder




无法执行undo defineProperty,因此我重新覆盖了属性,但没有其他不想要的行为。

答案 1 :(得分:1)

首先,对原始文件进行一些修复以使其更简单,并且当对象上尚不存在该属性时使其工作:

console = console || {};
console.watch = function (obj, prop) {
    var value_ = obj[prop];

    Object.defineProperty(obj, prop, {
        configurable: true,
        get: function () {
            return value_;
        },
        set: function (value) {
            debugger; // sets breakpoint
            value_ = value;
        }
    });
};

然后实施unwatch很简单:

console.unwatch = function (obj, prop) {
    var value = obj[prop];
    delete obj[prop];
    obj[prop] = value;
};