当前位置: 首页 > news >正文

原型链简易了解

后面会出几篇自定义补环境框架的文章,在讲解环境框架之前,需要对原型链有简单的了解

相信有不少人有一个误区,觉得手补环境才是最好的,因为灵活方便,不想使用补环境框架,因为复杂。

其实根本原因归结于过于依赖吐环境代理,吐环境代理并不万能,很多时候很多环境并不能吐出业务代码真正执行的流程,甚至有时吐出的代理会让你走进错误分支。首先任何业务代码都要遵循加密执行逻辑,而不是吐什么补什么,谨住这一点!!

首先何为原型链,是指将一个对象指向另一个对象,通过使用obj.__proto__ 或 Object.getPrototypeOf(obj)能看导其结构

比如document.__proto__是HTMLDocument

而HTMLDocument的__proto__是Document

Document的__proto__是Node

Node的__proto__是EventTarget

这种层层相连的关系就是原型链,值得注意的是,下级可以继承上级对象的属性,而上级不能使用下级的自身属性

比如你们常见的addEventListener事件是EventTarget的属性,而继承EventTarget对象的Node, Document, HTMLDocument, document都能调用addEventListener

很好理解吧?你们手补的document对象补addEventListener方法,然后又在windows对象手补addEventListener方法,这种东凑西补的方法,当遇到了补环境要求特别高的代码,会补的眼花缭乱,混乱复杂。

那我们在nodejs中,为了完全模拟伪造这种原型链,代码如下:

EventTarget = function EventTarget() {}; EventTarget.prototype.addEventListener = function addEventListener() {}; Node = function Node() {}; Object.setPrototypeOf(Node.prototype, EventTarget.prototype) Document = function Document() {}; Object.setPrototypeOf(Document.prototype, Node.prototype) HTMLDocument = function HTMLDocument() {}; Object.setPrototypeOf(HTMLDocument.prototype, Document.prototype) document = {}; Object.setPrototypeOf(document, HTMLDocument.prototype) console.log(document) console.log(document.addEventListener)

看,这就成功初步模拟伪造了浏览器环境 关于toString检测又是怎么过呢?

这是浏览器环境

这是nodejs的

最简单的做法是

document.toString = function (){

return '[object HTMLDocument]'

}

document.addEventListener.toString = function (){

return 'function addEventListener() { [native code] }'

}

这样就把toString检测过了。当然了,正常肯定不是这样补的 这种做法太过儿科了 至于属性描述符检测,不用过多赘述了 了解完原型链之后,就算成功摸入创建自定义环境环境的门槛了,后面有时间再出如何自定义环境框架的文章

感兴趣的联系我,加入知识星球

http://www.gsyq.cn/news/112101.html

相关文章:

  • LobeChat能否支持神经渲染?虚拟形象动态表情生成
  • 图片转文字技术(三)提升图片转文字与AI翻译准确率的实用技巧与技术实践
  • 今日总结2
  • 基于Java的奖学金评定评优系统的设计与实现
  • FeHelper:重新定义你的前端开发效率边界
  • 12-16午夜盘思
  • 【开题答辩全过程】以 基于Android的环卫人员管理系统设计与实现为例,包含答辩的问题和答案
  • Video DownloadHelper CoApp 深度解析:视频下载增强工具完整配置方案
  • C++ asio网络编程(2) buffer同步读写
  • BetterNCM 安装器完整使用指南:从零开始掌握插件管理
  • 阴阳师百鬼夜行效率提升终极指南:5个自动化技巧快速掌握
  • LobeChat能否实现AI律师函撰写?法律文书自动化产出
  • Video DownloadHelper 配套应用终极配置指南:告别视频下载烦恼
  • PyJWT与Django实战:从零构建现代化认证系统
  • 显卡驱动终极清理方案:Display Driver Uninstaller完整使用指南
  • LobeChat能否对接GitHub?代码仓库智能搜索与建议
  • cyh_蓝桥杯python学习系列一算法基础
  • 哔哩下载姬完整使用指南:轻松掌握B站视频高效下载技巧
  • ComfyUI-Manager插件管理完整指南:从零开始掌握AI绘画工具管理
  • 人工智能之数字生命---绘画能力的生成3
  • 如何设计吸引眼球的放假通知图片
  • TPFanCtrl2终极指南:让你的ThinkPad风扇智能又安静
  • LobeChat如何帮助初创公司快速上线AI产品原型?
  • Bypass Paywalls Clean完整使用教程:轻松解锁付费新闻的实用方案
  • 旧Mac系统升级优化焕新指南:突破官方限制的完美方案
  • PyJWT与Django集成终极指南:构建现代Web认证系统
  • 华为设备--多生成树全套配置
  • LobeChat社区治理模式探索:DAO投票决定方向
  • 为什么日本出了那么多诺贝尔奖,却感觉科技水平落后于现在的中国呢?
  • MTKClient终极指南:如何快速解锁联发科设备的完整潜力