javascript基础之我见(2)----一句话搞定this,并浅析js,as相互调用的this问题
在写js的时候,我们往往会遇到this的概念,this的指向,总会让人很头痛。今天根据我对this的理解,和一些经验,来用一句话总结下this。那么这句话就是:
this在有函数调用者时指向调用者否则指向GLOBAL,call、apply除外。
那么,我们通过一个例子来理解并记住这句话:
1 function test(){ 2 console.log(this); 3 } 4 test();//Window 5 var th = {}; 6 test.call(th)//th 7 test.apply(th)//th 8 var a = function(){ 9 } 10 a.test = test; 11 a.test();//Function a 12 a.prototype = { 13 test : test 14 } 15 var b = new a(); 16 b.test();//b; 17 a.prototype.test()//a.prototype 18 setTimeout(b.test,100)//Window 19 document.body.onclick = function(e){ 20 b.test();//b 21 test();//Window 22 console.log(this)//document.body 23 } 24 function callMethod(callback){ 25 callback();//Window 26 arguments[0]();//arguments --> arguments.0() 27 } 28 callMethod(b.test);
上面的例子中注释的位置显示了当前this的指向,我们可以看到,this可以是对象也可以是函数等,在有调用者的时候指向调用者,call、apply可以改变函数内部的this,其他时刻指向的是Global(浏览器中为Window)。as的情况与js完全相同。
下面我们来说说js,as之间调用时,this的指向:
js调用as函数时,as函数内部的this指向root。
as调用js时呢?实际上还是遵循上面的那句话。请看下面的例子
1 //AS代码 2 externalinterface.call("test"); 3 externalinterface.call("test.test"); 4 //JS代码 5 function test(){ 6 console.log(this); 7 } 8 test.test = test;
AS代码中第一句调用,调用了全局函数test,并没有制定调用者,则此时test函数中this指向Global,AS第二句调用,是对test下的test进行调用,所以this会指向函数test,也就是说AS调用js,对于this的指向与AS无关,判断this的方式和js内部调用时完全相同。
怎么样一句话记住this,没错吧~嘻嘻~
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架