object.watch (Object) – JavaScript 中文开发手册
2021-04-20 03:26
object.watch (Object) - JavaScript 中文开发手册
警告:通常你应该避免使用,watch()和unwatch()在可能的情况下。这两种方法仅在 Gecko 中实现,主要用于调试。另外,使用观察点会对性能产生严重的负面影响,在使用全局对象时尤其如此,例如window。你通常可以使用 setter 和 getters 或者代理。详情请参阅浏览器兼容性。另外,不要混淆Object.watch使用Object.observe。
watch()方法监视属性被分配一个值并在发生时运行一个函数。
语法
obj.watch(prop, handler)
参数
prop要在其上监视更改的对象的属性的名称。handler指定属性值更改时调用的函数。
返回值
undefined.
描述
用于赋值给prop此对象中指定的属性的手表,handler(prop, oldval, newval)每当prop设置时调用并将返回值存储在该属性中。观察点可以通过返回修改newval(或返回oldval)来过滤(或取消)赋值。
如果您删除了设置了观察点的属性,则该观察点不会消失。如果稍后重新创建属性,则观察点仍然有效。
要移除观察点,请使用该unwatch()方法。默认情况下,该watch方法由后继的每个对象继承Object。
JavaScript 调试器具有与此方法提供的功能类似的功能,以及其他调试选项。有关调试器的信息,请参阅 Venkman。
在 Firefox 中,handler只能从脚本中调用,而不是从本机代码调用。例如,如果用户单击指向当前文档中的锚点的链接,window.watch(‘location‘, myHandler)则不会调用myHandler。但是,window.location += ‘#myAnchor‘会打电话myHandler。
注意:调用watch()特定属性的对象会覆盖为该属性附加的任何以前的处理程序。
示例
使用watch和unwatch
var o = { p: 1 }; o.watch(‘p‘, function (id, oldval, newval) { console.log(‘o.‘ + id + ‘ changed from ‘ + oldval + ‘ to ‘ + newval); return newval; }); o.p = 2; o.p = 3; delete o.p; o.p = 4; o.unwatch(‘p‘); o.p = 5;
该脚本显示以下内容:
o.p changed from 1 to 2 o.p changed from 2 to 3 o.p changed from undefined to 4
使用watch来验证一个对象的属性
您可以使用watch来测试对对象属性的任何赋值。这个例子确保每个人总是有一个有效的名字和年龄在0到200之间。
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, oldval, newval) { if (id === ‘name‘ && (!newval || newval.length > 30)) { throw new RangeError(‘invalid name for ‘ + this); } if (id === ‘age‘ && (newval 200)) { throw new RangeError(‘invalid age for ‘ + this); } return newval; } will = new Person(‘Will‘, 29); console.log(will); // Will, 29 try { will.name = ‘‘; } catch (e) { console.log(e); } try { will.age = -4; } catch (e) { console.log(e); }
该脚本显示以下内容:
Will, 29 RangeError: invalid name for Will, 29 RangeError: invalid age for Will, 29
产品规范
不是任何规格的一部分。在 JavaScript 1.2中实现。
浏览器兼容性
Feature |
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
Basic Support |
No |
No |
(Yes) |
No |
No |
No |
Feature |
Android |
Chrome for Android |
Edge mobile |
Firefox for Android |
IE mobile |
Opera Android |
iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support |
No |
No |
No |
(Yes) |
No |
No |
No |
文章标题:object.watch (Object) – JavaScript 中文开发手册
文章链接:http://soscw.com/index.php/essay/76942.html