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

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

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

this的指向规则 📌

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

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

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

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

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

改变this指向的方法 🔄

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

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

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

    javascript 复制代码
    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值。

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

总结 📝

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

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

相关推荐
Laravel技术社区33 分钟前
用PHP8实现斗地主游戏,实现三带一,三带二,四带二,顺子,王炸功能(第二集)
前端·游戏·php
m0_738120722 小时前
应急响应——知攻善防Web-3靶机详细教程
服务器·前端·网络·安全·web安全·php
hh随便起个名8 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
写写闲篇儿8 小时前
微软面试之白板做题
面试·职场和发展
我是小路路呀8 小时前
element级联选择器:已选中一个二级节点,随后又点击了一个一级节点(仅浏览,未确认选择),此时下拉框失去焦点并关闭
javascript·vue.js·elementui
程序员爱钓鱼8 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder9 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL9 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码9 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_9 小时前
列表渲染(v-for)
前端·javascript·vue.js