javascript的动态this与动态绑定 javascript是一门动态语言最明显就是那个dynamic this。它一般都是作为函数调用者存在。在javascript所有关系都可以作为对象的一个关联数组元素而存在。那么函数就是被掰成两部分储存于对象一是其函数名键一是函数体值那么函数中的this一般都指向函数所在的对象。但这是一般而已在全局调用函数时我们并没有看到调用者或者这时就是window。不过函数声明后其实并没有绑定到任何对象因此我们可以用call apply这些方法设置调用者。一个简单的例子window.name window;varrun function() {alert(My name is this.name);}run();运行代码这里你不能说run是作为window的一个属性而存在但它的确是被window属性调用了。实质上大多数暴露在最上层的东西都则window接管了。在它们需要调用时被拷贝到window这个对象上不过在IE中window并不继承对象于是有了window[xxx]与window.xxx性能上的差异。这是内部实现不深究了。另一个例子绑定到一个明确的对象上window.name window;object {name:object,run:function() {alert(My name is this.name);}};object.run();运行代码答案显然易见this总是为它的调用者。但如果复杂一点呢window.name window;object {name:object,run:function() {varinner function(){alert(My name is this.name);}inner();}};object.run();运行代码尽管它是定义在object内部尽管它是定义run函数内部但它弹出的既不是object也不是run因为它既不是object的属性也不是run的属性。它松散在存在于run的作用域用不能被前两者调用就只有被window拯救。window等原生对象浸透于在所有脚本的内部无孔不入只要哪里需要到它做贡献的地方它都义不容辞。但通常我们不需要它来帮倒忙这就需要奠出call与apply两大利器了。window.name window;varobject {name:object,run:function() {inner function() {alert(this.name);}inner.call(this);}}object.run();运行代码call与apply的区别在于第一个参数以后的参数的形式call是一个个aplly则都放到一个数组上在参数不明确的情况我们可以借助arguments与Array.slice轻松搞定。window.name Window;varcat {name:Cat};vardog {name:Dog,sound:function(word) {alert(this.name word);}};dog.sound( is pooping);dog.sound.call(window, is banking);dog.sound.call(dog, is banking);dog.sound.apply(cat, [ miaowing]);运行代码由此Prototype开发者搞了一个非常有名的函数出来bind!以下是它的一个最简单的版本varbind function(context, fn) {returnfunction() {returnfn.apply(context, arguments);}}

相关新闻

最新新闻

微信小程序疫苗预约系统实战:从设计到上线全复盘

微信小程序疫苗预约系统实战:从设计到上线全复盘

简介:预约系统是连接服务提供方与用户的数字化桥梁,其核心在于将线下排队转化为线上数字化流程。在技术实现上,需要处理高并发场景下的资源竞争,例如疫苗库存的扣减必须依赖原子操作,以保证数据一致性。这类系统的技术…

2026/8/29 8:36:30
基于Claude Skill的专利撰写助手:从idea到技术交底书的半自动方案

基于Claude Skill的专利撰写助手:从idea到技术交底书的半自动方案

这次我们来看一个“专利撰写”方向的 Skill 合集。它的核心卖点很直接:把 Claude 这类大模型工具变成专利撰写助手,输入论文、技术文档或者一个 idea,就能批量产出技术交底书、权利要求书初稿、说明书摘要等专利写作环节的关键文档。如果你最…

2026/8/29 8:36:30
OpenAI自研芯片Jalapeño:AI算力格局重构与开发者的应对之道

OpenAI自研芯片Jalapeño:AI算力格局重构与开发者的应对之道

1. 为什么 OpenAI 自研芯片让整个 AI 圈都在讨论 最近技术圈最热的话题之一,就是 OpenAI 被曝出正在加速推进自研芯片计划,项目代号 “Jalapeo”。消息来源是 SemiAnalysis 的深度分析报告,随后国内各大平台也陆续跟进,相关讨论从…

2026/8/29 8:36:30
给大模型做记忆:四种落地路径与最简Demo实践

给大模型做记忆:四种落地路径与最简Demo实践

给大模型做记忆并不是一个新概念,但在过去一年里,它从一个技术细节变成了一个独立赛道。郝建业团队半年融三轮,就是一个很典型的信号:资本开始为“模型记忆”买单了。很多人第一次听到这个方向时会以为,记忆就是把历史…

2026/8/29 8:36:30
反向KL散度详解:从数学原理到PyTorch实现,OPD在线策略蒸馏实战指南

反向KL散度详解:从数学原理到PyTorch实现,OPD在线策略蒸馏实战指南

Transformer 相关的文章里,讲 KL 散度的不少,但绝大多数都是一句话带过:“损失函数里加了一个 KL 项”。这对理解模型行为来说远远不够。尤其是在 OPD 这类在线策略蒸馏框架里,KL 的方向选择直接决定了学生模型是“覆盖教师分布”…

2026/8/29 8:36:30
Mac 终端数据安全:safe-rm 将 rm 重定向为 mv 防误删

Mac 终端数据安全:safe-rm 将 rm 重定向为 mv 防误删

Safe-rm 的核心想法很简单:在 Mac 上把rm重映射成mv,让删除操作变成把文件移动到废纸篓目录,从而避免 LLM 生成的删除命令直接摧毁数据。这个工具本身并不复杂,但它针对的是终端用户最容易忽略的一类问题:删除操作不可…

2026/8/29 8:31:30