JS中this关键字的区别
来源:互联网 发布:信达期货软件 编辑:程序博客网 时间:2024/04/28 19:04
JS与Java在this关键字上的处理是不同的,Java可以很清晰的明白this指代的是哪个对象,而js则会产生很多歧义,接下来,我们一步一步解释JS中不同函数或闭包里面的this关键字。
读以下代码之前,请先百度《JS变量作用域链》,来帮助理解。
重点:this关键字是谁调用指向谁!
普遍的函数调用:
最后一行代码是完整的调用写法,可以轻易看出调用者为window,所以方法里面的this指代window
function testThis1(){ console.info("Test1="+this);}testThis1();// 简单的写法window.testThis1();//完整的写法
嵌套函数调用:
外部函数将返回嵌套函数fn,此时并没有直接调用fn,而是在最外层才调用,所以结果也同上,是由window调用fn,fn里面的this为window
function testThis2(){ var fn = function(){ console.info("Test2="+this); } return fn;}var temp = testThis2();// 将一个函数赋值给变量temptemp();// 正式调用函数window.temp();// 完整写法
对象的函数调用:
将函数赋值给对象的属性,作为对象的方法调用,此时调用应该是obj1.action(),明显的看出调用者变为了obj1,又由于所有全局变量都是window的属性,所以可以像最后一行那样调用函数,打印的this结果都是obj1
var obj1 = { action:function(){ console.info("Test3="+this); }};obj1.action();// 对象函数调用window.obj1.action();// 完整写法
调用对象函数返回的函数:
当对象函数里面返回函数时,实际上并没有立即调用这个函数,而是返回到最外层进行调用,所以这个嵌套函数的调用者仍然是window,但是对象函数调用者为obj2。也就是说action()里面this指代obj2,匿名嵌套函数this指代window
var obj2 = { action:function(){ console.info(this);// 打印obj2 var that = this;// 通常可以缓存this也就是obj2,然后内层函数就可以直接用that,而不是使用this了 return function(){ console.info(that);// 打印obj2 console.info(this);// 打印window }; }}obj2.action();// 返回一个函数,但此时没有调用该函数obj2.action()();// 正式调用函数,该代码最后的效果应该类似于下面的代码(function(){console.info(this);})();
0 0
- JS中this关键字的区别
- js中this关键字
- js中this关键字的使用
- JS中this关键字的使用
- js中this关键字的用法
- JS 中 和 JQuery 的 this 关键字
- js中this关键字的指向问题
- js中对this关键字的理解
- js中关于this关键字的理解
- js中this关键字的指向
- JS的this关键字
- JS的this关键字
- js的this关键字
- JS的this关键字
- java中this关键字与super关键字的区别
- js中this关键字探讨
- 解析JS中this关键字
- JS 中 this 关键字详解
- Day_7.(1)
- Android APK反编译就这么简单 详解(附图)
- mysql5.1.17 安装过程服务无法启动
- 试试
- 迷瘴
- JS中this关键字的区别
- [1927-2011][影片][历届奥斯卡最佳影片合集][全82部]
- 迭代器失效小结
- Windows7如何设置VPN连接
- React-native Cannot find module 'invariant' at Function.Module._resolveFilename (module.js:337:15)
- 使用log4j切分tomcat的catalina.out输出文件
- Android底部和标签导航栏—TabLayout+Fragment
- poj2409 Let it Bead(置换群+Polya定理+Burnside引理)
- 828相关问题