MDN 对其的解释为:浏览器
概述: 监视一个对象的某个属性是否发生变化,在该属性变化时当即触发指定的回调函数. 语法: object.watch(prop, handler) 参数: prop 想要监视值是否发生变化的指定对象的某个属性的属性名称 handler 当指定的属性发生变化时执行的回调函数
在 DHTML.js内查看其声明以下:函数
能够看到这两个方法是只针对 Gecko 内核的浏览器使用的(FF 是使用的 Gecko 内核).
wacth 方法有两个参数,第一个参数是一个字符串,表明须要监视的属性名,第二个参数是个回调函数
unwatch 方法只有一个参数,表明须要取消监视的属性名.this
使用举例:spa
var o = {p:1}; o.watch("p", function (id, oldValue, newValue) { console.log("o."+id +" 由 "+oldValue +" 变为 "+newValue); return newValue;//注意点 }); o.p = 2; o.p = 3; delete o.p; o.p = 4;
输出结果为:
这里须要注意的是回调函数必须返回一个值,返回的值会覆盖原有的值(若无返回值默认返回的是 undefined),能够返回新值prototype
使用watch 方法来监视对象的属性code
//声明一个类 Person = function (name, age) { this.watch("age",Person.prototype._isValidAssignment); this.watch("name",Person.prototype._isValidAssignment); this.name = name; this.age = age; }; Person.prototype.toString = function () { return this.name + " , " + this.age; }; //定义语义上的私有方法 Person.prototype._isValidAssignment = function(id,oldVale,newValue){ if(id == "name" && (!newValue || newValue.length > 30)){ throw new RangeError("不合法的名字 "+ this); } if(id == "age" && (newValue <0 || newValue >200)){ throw new RangeError("不合法的年龄 "+ this); } return newValue;//重点,必须返回 } will = new Person("will",29); console.log(will); try{ will.name = ""; }catch(e){ console.log(e); } try{ will.age = -4; }catch(e){ console.log(e); }
输出结果以下:对象
最后引入 MDN 的一段描述与注意事项图片