当前位置: 首页 > news >正文

JavaScript中this的指向和改变this指向的方法 - 2024最新版前端秋招面试短期突击面试题【100道】

JavaScript中this的指向和改变this指向的方法 - 2024最新版前端秋招面试短期突击面试题【100道】 🔍

在JavaScript中,this关键字是一个非常重要的概念,它指向函数执行时的上下文对象。理解this的指向规则和改变this指向的方法,将帮助你更好地编写 JavaScript 代码。以下是关于this的详细讲解。

this的指向规则 📌

  1. 默认绑定:独立函数调用时,this指向全局对象(在非严格模式下)或undefined(在严格模式下)。

    function foo() {console.log(this); // 非严格模式:window 或 global;严格模式:undefined
    }
    foo();
    
  2. 隐式绑定:当函数作为对象的方法被调用时,this指向该对象。

    var obj = {method: function() {console.log(this); // 指向obj对象}
    };
    obj.method();
    
  3. 显式绑定:通过callapplybind方法可以明确地设置函数执行时的this指向。

    function foo() {console.log(this);
    }
    var obj = {};
    foo.call(obj); // this指向obj
    
  4. new绑定:使用new关键字调用构造函数时,this指向新创建的对象。

    function Foo() {this.bar = 'bar';
    }
    var baz = new Foo();
    console.log(baz.bar); // 输出 'bar'
    

改变this指向的方法 🔄

  1. call方法:调用一个函数并指定this的值和参数。

    function foo(a, b) {console.log(this, a, b);
    }
    foo.call({x: 1}, 'arg1', 'arg2'); // this指向{x: 1},参数为'arg1'和'arg2'
    
  2. apply方法:与call类似,但参数以数组的形式传递。

    function foo(a, b) {console.log(this, a, b);
    }
    foo.apply({x: 1}, ['arg1', 'arg2']); // this指向{x: 1},参数为数组['arg1', 'arg2']
    
  3. bind方法:创建一个新的函数,并预设this的值,但不立即调用。

    function foo(a, b) {console.log(this, a, b);
    }
    var bar = foo.bind({x: 1}); // 创建新函数bar,预设this为{x: 1}
    bar('arg1', 'arg2'); // 调用bar时,this指向{x: 1}
    
  4. 箭头函数:箭头函数不绑定自己的this,它捕获其所在上下文的this值。

    var obj = {method: function() {setTimeout(() => {console.log(this); // this指向obj对象}, 1000);}
    };
    obj.method();
    

总结 📝

了解this的工作原理是掌握JavaScript的关键之一,特别是在编写复杂的应用程序时。正确使用this可以避免许多常见的问题和错误。在实际开发中,合理选择不同的绑定方法,可以让你的代码更加灵活和易于维护。

掌握这些this的知识点将帮助你在前端面试中脱颖而出!祝你顺利上岸!


http://www.mrgr.cn/news/63595.html

相关文章:

  • 众测一路追到供应链
  • stm32入门教程--USART外设 超详细!!!
  • PHP如何对输出进行转义
  • Git 本地操作(2)
  • RAR解压软件要收费?放弃解压吧!毁灭吧!
  • Redis 分布式锁:原理、实现及最佳实践
  • 新浪新闻探索大会|赵世奇:文心智能体解锁AI浪潮中的商业新范式
  • 【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)
  • MySQL上RDS MySQL
  • 【天线&化学】遥感图油罐检测系统源码&数据集全套:改进yolo11-RCSOSA
  • 最清晰的微信小程序uni-app+vue3部署echarts图表的方法
  • kotlin 协程方法总结
  • 性能测试:性能测试流程与方法
  • java如何在不同的业务场景下使用最适合的Map接口使得代码效率达到最大化?
  • 基于LangChain手工测试用例生成工具
  • CSS3新增长度单位(二)
  • (六)Python结构数据类型
  • 一文读懂Zypher Research服务器抽象叙事,2024末段的热点
  • 20241101编译Rockchip原厂的RK3566平台的Buildroot【使用荣品的DTS】
  • 12月长沙EI会议征稿,你不能错过的传感和测量盛会
  • ERROR: btree index is not supported for ustore, please use ubtree instead
  • 【C语言】动态内存开辟
  • scRank从untreated数据推断药物有反应细胞类型
  • 逻辑磁盘管理 附实验:逻辑卷的组成与划分
  • 测序公司给的分析报告中为什么没有Ensembl GTF注释版本?
  • 「Math」初等数学知识点大纲(占位待处理)