JavaScript如何使用代理对象
JavaScript如何使用代理对象
小编给大家分享一下JavaScript如何使用代理对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
代理对象
代理对象是目前JavaScript中最有用的一个工具,这种对象可以帮助我们了解代码中的其他对象,包括修改其行为以及触发特定环境下的对象活动。比如说,我们可以创建一个嗲哩对象并跟踪每一次document.createElemen调用,然后记录下相关信息:
consthandler={//Ourhooktokeepthetrackapply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler)//Createourproxyobjectwithourhookreadytointerceptdocument.createElement('div');
接下来,我们可以在控制台中记录下相关参数和信息:
VM64:3InterceptedacalltocreateElementwithargs:div
我们可以利用这些信息并通过拦截某些特定函数来调试代码,但是本文的主要目的是为了介绍反调试技术,那么我们如何检测“对方”是否使用了代理对象呢?其实这就是一场“猫抓老鼠”的游戏,比如说,我们可以使用相同的代码段,然后尝试调用toString方法并捕获异常:
//Calla"virgin"createElement:try{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}
信息如下:
"functioncreateElement(){[nativecode]}"
但是当我们使用了代理之后:
//Thenapplythehookconsthandler={apply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler);//Callournot-so-virgin-after-that-partycreateElementtry{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}
没错,我们确实可以检测到代理:
VM391:13Isawyourproxy!
我们还可以添加toString方法:
consthandler={apply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler);document.createElement=Function.prototype.toString.bind(document.createElement);//AddtoString//Callournot-so-virgin-after-that-partycreateElementtry{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}
现在我们就没办法检测到了:
"functioncreateElement(){[nativecode]}"
就像我说的,这就是一场“猫抓老鼠“的游戏。
以上是“JavaScript如何使用代理对象”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
JavaScript闭包用多会造成内存泄露吗
-
javascript中文乱码如何解决
-
PHP学习第十五天——JavaScript入门DOM对象:二
-
Node.js基本内容和知识点
简单的说node.js就是运行在服务端的JavaScript,起初段定位是后端开发语言,由于技术的不够成熟,一般小型项目...
-
PHP与Node.js:一个史诗般开发者的分享
-
JavaScript 中 find() 和 filter() 方法的区别
JavaScript在ES6上有很多数组方法,每种方法都有独特的用途和好处。在开发应用程序时,大多使用数组方法来获...
-
js怎么跟php结合使用
-
简单说说Node.js和JavaScript
Node.js是一个开源和跨平台的JavaScript运行时环境,在浏览器之外运行V8JavaScript引擎(...
-
前端开发工程师专业技能简历范文
-
JavaScript怎么实现淘宝网图片的局部放大功能