利用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的原創文章,請關注公眾號"汪子熙"