利用Object.defineProperty挂接set钩子,监控对象属性的修改事件

测试代码:

<html>  <script>  "use strict";  function test(){  	Object.defineProperty(window, "_name", {      	get : function(){ console.log("gett is called ") },      	set : function(newValue){      		debugger;      		console.log("_name is filled!!!!");      	},      	enumerable : true,      	configurable : true  	});    	for( var i = 0; i < 2; i++)  		console.log(i);        window._name = "2";  };    test();  </script>

通过第5行开始的Object.defineProperty, 给window全局对象的_name属性设置了一个set hook,这样每当该属性被update时,注册的set hook会自动被调用:

测试:

一旦第18行window._name = 2被执行:

set hook会自动触发:

要获取更多Jerry的原创文章,请关注公众号"汪子熙"