博客
关于我
对于js中的this指向的深入理解
阅读量:408 次
发布时间:2019-03-05

本文共 1546 字,大约阅读时间需要 5 分钟。

this指向详解

1. this的指向规则

this的指向是 JavaScript 中一个非常重要的概念,它决定了在函数中哪个对象会被用来访问变量、方法和属性。在不同的调用方式下,this的指向会发生变化。以下是几种常见的 this 指向规则:

  • new绑定:

    当函数被用 new 调用时,this 指向的是新创建的对象。如果构造函数没有返回值,this 指向新对象;如果返回值是一个对象或函数,则this指向返回值。

  • 显式绑定:

    使用 call、apply 或 bind 方法手动指定 this 的值。如果传入 null 或 undefined,严格模式下 this 为传入值,非严格模式下按默认规则绑定全局对象。

  • 隐式绑定:

    函数在对象属性上直接调用,如 obj.func(),此时 this 指向 obj。

  • 默认绑定:

    当没有其他绑定规则适用时,this 绑定为调用函数的上下文对象。在严格模式下,this 为 undefined,否则为全局对象。

  • 箭头函数:

    箭头函数没有自己的 this,它继承外层上下文的 this。


  • 2. this指向的面试题总结

    如何判断 this 的指向?

  • 判断是否为 new 绑定:如果函数被 new 调用,则 this 指向新对象(返回值为对象或函数时除外)。

  • 判断是否为显式绑定:如果函数使用 call、apply 或 bind 手动指定 this,则 this 指向指定对象。

  • 判断是否为隐式绑定:如果函数在对象属性上调用,如 obj.func(),则 this 指向对象 obj。

  • 默认绑定:如果以上均不适用,则 this 绑定为调用上下文对象(严格模式下为 undefined)。

  • 特殊情况:若 call、apply 或 bind 传入 null 或 undefined,严格模式下 this 为传入值,否则按默认规则绑定全局对象。


  • 3. 实际案例分析

    案例1:默认绑定

    var age = 28;function info4() {    console.log(this.age);}info4(); // 严格模式下:this 为 undefined,非严格模式下:this 为 window 或 global

    案例2:显式绑定

    var person3 = {    age: 26,    info: function() {        console.log(this.age);    }};var info = person3.info.bind(person3)();// 调用 bind 后,this 指向 person3

    案例3:隐式绑定

    var person5 = {    age: 26,    info3: function() {        console.log(this.age);    }};person5.info3(); // this 指向 person5

    案例4:箭头函数

    let obj = {    age: 27,    info: function() {        return () => {            console.log(this.age); // 这里的 this 指向 obj        }    }};let info5 = obj.info();info5(); // 输出 27

    4. 总结

    this 的指向是 JavaScript 开发中必须深入理解的核心概念。通过 new、显式绑定、隐式绑定和默认绑定等规则,可以准确判断 this 的值。尤其是在面试中,能够灵活运用这些规则来分析函数调用上下文,能够大大提升你的代码写作能力和问题解决能力。

    转载地址:http://capg.baihongyu.com/

    你可能感兴趣的文章
    Python下调用Linux的Shell命令
    查看>>
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>
    python与运算符_python运算符
    查看>>
    python两个列表获取交集,并集,差集
    查看>>
    python两个字典合并,两个list合并
    查看>>
    Python两个版本共存时,命令行升级pip
    查看>>
    Python两个版本共存时,怎么验证是否安装成功 scrapy
    查看>>
    Python两个版本共存时,通过pip安装Scrapy
    查看>>
    python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
    查看>>
    Python中 pass语句的作用
    查看>>
    python中 urllib, urllib2, httplib, httplib2 几个库的区别
    查看>>
    python中 yaml库 & json库 & xmltodict库使用
    查看>>