资讯专栏INFORMATION COLUMN

this关键字到底指向谁?

curlyCheng / 2186人阅读

摘要:前言先做一个小测试,如果全部答对了,恭喜你不用往下看了。它就相当于一个没有主人调用它,无主函数。不管你用还是最终调用的都是函数,但它们会强制的指向了,强制的指向了它们的第一个参数对象。

前言

先做一个小测试,如果全部答对了,恭喜你不用往下看了。

第一题
第二题
第三题
第四题
答案
第一题:zhangsan wangwu zhangsan
第二题:zhangsan zhangsan
第三题:我叫zhangsan 我叫zhangsan
第四题:zhangsan zhangsan zhangsan lisi wangwu
(往下看,下面有详细解析哦)
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,强制的指向了它们的第一个参数对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87180.html

相关文章

  • ES5 call,apply,bind方法总结(包括理解this指向问题)

    总结call,apply,bind方法的理解使用和区别。 call,apply,bind这三个方法在JavaScript中是用来改变函数调用的this指向。那么改变函数this指向有什么用呢?我们先来看一段代码 var a= { name:harden, fn:function () { console.log(this.name); } } var b =...

    nanchen2251 评论0 收藏0
  • this指向

    摘要:情况如果一个函数中有,这个函数有被上一级的对象所调用,那么指向的就是上一级的对象。 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的指向的是最终调用它的对象。 函数调用模式 例子1 function a(){ var user = username; console.log(this.user)...

    xiongzenghui 评论0 收藏0
  • 理解学习this指向问题

    摘要:否则报错在严格模式下,对象的函数中的指向调用函数的对象实例同样道理,可以推断出,在严格模式下,构造函数中的指向构造函数创建的对象实例。 要点 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。 this指向的三种情况 情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的...

    dendoink 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<