博客
关于我
对于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/

    你可能感兴趣的文章
    pythonweb网站开发基础创建django项目
    查看>>
    pythonweb网站开发基础添加应用
    查看>>
    Python_015 多线程
    查看>>
    python_73_pickle序列化(接72)
    查看>>
    python_code_418
    查看>>
    python_day10 协程 GEVENT
    查看>>
    python_day1作业
    查看>>
    Python接口自动化测试必备基础之http协议详解!
    查看>>
    python_IDE开发环境使用_建立Python源文件---python工作笔记011
    查看>>
    Python_web框架解析
    查看>>
    Python__Enter__/__Exit__vs__init__(或__new__)/__del__
    查看>>
    python_对象的基本组成和内存示意图---python工作笔记016
    查看>>
    python_开发环境介绍_交互模式使用_IDE介绍和使用---python工作笔记010
    查看>>
    python_引用的本质_栈内存和堆内存_内存示意图---python工作笔记017
    查看>>
    python_标识符_帮助系统的使用_命名规则---python工作笔记018
    查看>>
    python_海龟绘图_坐标系问题_画笔各种方法---python工作笔记013
    查看>>
    python_海龟绘图_画出奥运五环图---python工作笔记014
    查看>>
    Python_生产者消费者模型、管道、数据共享、进程池
    查看>>
    python_程序格式_缩进_行注释_段注释---python工作笔记012
    查看>>
    python_程序的构成---python工作笔记015
    查看>>