利用Object.defineProperty掛接set鉤子,監控對象屬性的修改事件
- 2020 年 3 月 9 日
- 筆記
測試程式碼:
<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的原創文章,請關注公眾號"汪子熙"