//第一種 補環境的方法 let test1 = { name:"小紅" }; test = new Proxy(test1,{ get(target,key){ console.log("獲取了",key + "屬性"); return target[key]; } }) test.name //實戰應用(注釋部分的內容倒着看) //然后繼續代理,按照這種的思路。繼續的尋找,不但代理對象,獲取里面的屬性或者方法。然后檢測其返回值。 //特點是每次只能檢測一個,所以,補完每一個級別的對象之后,都需要重新的進行檢測 canvas = {} let document = { createElement:function (val) { if (val = "canvas"){ return canvas //到瀏覽器中看一看需要輸入哪些內容 } } }; //返回的是一個document對象,那么就設置一個空對象,看一看從這個空對象里面取了哪些值 //找到確是環境中缺失的屬性之后,然后再函數中不傳參數,但是打印參數。通過這樣的方式來獲取環境中使用的參數 // let document = { // createElement:function () { // console.log(arguments) // } // }; document = new Proxy(document,{ get(target,key){ console.log("獲取了",key + "屬性"); return target[key]; } }) document.createElement() //就可以檢測這里面調用了document中的哪些屬性 //進階的使用 //吐環境 function proxy(proxy_array){ for(let i = 0;i<proxy_array;i++){ eval(proxy_array[i] + ' = new Proxy(' + proxy_array[i] + ',{ ' + 'get(target,key){ ' + 'debugger;' + 'console.log("====================")'+ 'console.log("獲取了",'+ proxy_array[i] + ' 的key屬性"); ' + 'console.log("====================")'+ 'return target[key]; }') } } //常用的proxy_array var proxy_array = ["window","document","location","navigator"] proxy(proxy_array) //如果需要補XMLHttpRequest、ActiveXObject,直接給空對象不用管 //可以用typeof 判斷數據類型 //第二種補環境的方法 //代碼可以混淆的部分 形參、實參、變量名等可以變的東西 //最終的結果不會混淆 //所以,規避代碼中的變量名和方法。需要補的內容是瀏覽器中有的東西,而不是代碼中有的東西 //所以動態的代碼,通過補環境是一個很好的方法 //檢測音頻指紋的代碼 //等待頁面加載后的調用 //this 改寫成that 然后寫一個定時器。然后就可以實現自動的執行