什么是this 改变this指向的方法

this 是什么 ?

this是包含它的函数 作为方法被调用时 所属的对象。

function arr(){
     console.log(this); //window
 }
arr();  //window

this 指向 window 的情况

全局下调用函数: this指向window

    function foo() {
        console.log(this); // window
    }

    foo();

定时器与延时器中的this

setInterval(function () {
    console.log(this); // window
 });

setTimeout(function () {
    console.log(this); // window
});

自执行函数

(function () {
    console.log(this); // window
})()

闭包

    function arr() {
        return function () {
            console.log(this); // window
        }
    }

    var boo = arr();
    boo(); // 最后是window调用了这个函数

改变 this 指向的三种方法

通常情况下,我们想使用其它环境变相下的状态,这就需要借助this来实现,常用改变this指向的有以下几种方式可以实现

call()

语法:
函数.call(this, 参数1, 参数2, ...)
会立即执行该函数

    var arr = {
        name: '胖子',
        fn(a, b) {
            console.log(this.name, a, b);  // 瘦子 a b
        }
    }

    var abb = {
        name: '瘦子',
    }

    arr.fn.call(abb, 'a', 'b');    //瘦子 a b

apply()

语法:
函数.apply(this, [参数1, 参数2, ...])
会立即执行该函数

   var arr = {
        name: '胖子',
        fn(a, b) {
            console.log(this.name, a, b);  // 瘦子 a b
        }
    }

    var abb = {
        name: '瘦子',
    }

    arr.fn.apply(abb, 'a', 'b');    //瘦子 a b

bind()

函数.bind(this, 参数1, 参数2,...);
不会立即执行,返回一个新的函数,函数体内的this指向传入的对象,参数以逗号隔开,并且会自动拼接, bind 跟call相似,只不过后面多了个 ()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 1,173评论 0 2
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,679评论 0 5
  • 前言 面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。读者可以先拉到底部看总...
    若川i阅读 1,146评论 0 10
  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 首先,thi...
    许先生__阅读 578评论 0 4
  • 时差党,美高生,坐标加州。 喜欢看书和写作,酷爱风花雪月。 悲观主义者,周期性焦虑。 对股市感兴趣。未来打算去念经...
    眠旧时书阅读 241评论 0 0