//第一种 补环境的方法
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 然后写一个定时器。然后就可以实现自动的执行