我正在考虑添加在我的代码库中观察变量的功能,我发现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'撤消上述方法?如果是这样,怎么办呢?
答案 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;
};