Javascript中this关键字指向问题的测试与详解
前言
Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象。Javascript可以通过一定的设计模式来实现面向对象的编程,其中this“指针”就是实现面向对象的一个很重要的特性。本文将给大家详细介绍关于Javascript中this关键字指向的相关内容,让我们先做一个小测试,如果全部答对了,恭喜你不用往下看了。
测试题目
第一题
第二题
第三题
第四题
答案
- 第一题:zhangsanwangwuzhangsan
- 第二题:zhangsanzhangsan
- 第三题:我叫zhangsan我叫zhangsan
- 第四题:zhangsanzhangsanzhangsanlisiwangwu
(往下看,下面有详细解析哦)
this
- 指向调用函数的对象
- 无对象调用函数/匿名函数自调用(this指向window)
- 通过new产生的对象
- apply/call调用
一、指向调用函数的对象
- 全局函数(demo)属于window对象的方法,window调用demo所以this就指向了window
- obj调用say方法,this就指向了obj
- fun()是全局函数,而声明的fun接收的是obj里面单纯的一个函数,并没有调用(obj.say()才是调用了函数),此时的fun就是一个函数(function(){alert(this.str);}),那么当fun()调用函数的时候,this指向的就是window
- 是谁调用的函数,那么this就指向谁
二、无对象调用函数/匿名函数自调用->this指向window
- 因为匿名函数没有名字,所以就挂给window了
- test(),谁调用test那么就指向谁。当然实验过,它不是window调用的,也不是demo调用的,没有人管它,那么它就指向window。它就相当于一个没有主人调用它,无主函数。
三、通过new产生的对象
- 当我们的函数Person里面运用了this去写属性和方法这种格式,那么就要通过new来让属性和方法变得有价值,通过new去运用函数里面的属性和方法
四、apply/call调用
首先我们来了解下apply()/call()是个什么东西呢?
apply()/call():最终是调用function,只不过内部的this指向了thisObj
function.call([thisObj[,arg1[,arg2[,[,.argN]]]]]) function.apply([thisObj[,argArray]])
注意:
1.调用function函数,但是函数内的this指向thisObj(更改对象内部指针)
2.如果thisObj没有传参,则默认为全局对象
3.call()/apply()联系与区别
联系:功能一样,第一个参数都是thisObj
区别:传递的参数如果比较多
call()的实参就是一一列出
apply()的实参是全部放置在第二个数组参数中
一个理解apply()/call()的实例:
this的第四个用法实例
- 如果直接调用demo里面写的不管是obj1还是obj2,那么demo还是属于window调用的。
- 不管你用call还是apply最终调用的都是demo函数,但它们会强制的this指向了obj1/obj2,强制的指向了它们的第一个参数对象。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。