[聚合文章] [javascript]搞清this的指向只需问两个问题

JavaScript 2017-12-04 14 阅读

在确定身份时我们需要问两个问题: 1,我是谁;2,我在那

一,考虑一下情景

  • 问:我是学生,我在哪(this = ?)?
    答:学校
  • 问:我是员工,我在哪(this = ?)?
    答:公司
  • 问:我是中国人,我在哪(this = ?)?
    答:中国
  • 问:我去参加运动会,挂着我们学校的名牌,我在哪(this = ?)?
    答:xxx实验高中

二,再看javascript中的this指向

考虑下面的代码

// test01.js

function fa(){
    console.log(this)
}

var obja = {
    fb: function(){
        console.log(this)
    }
}

var objb = {};

var fc = obja.fb;

//执行
fa();
obja.fb();
fc();
fa.call(objb);
fa.apply(objb);

1,fa()直接调用

这是告诉浏览器 函数fa是全局作用域(window)下的一个函数 ,这时候去问 fa在哪? ,答:全局作用域, this = window

2,obja.fb()

这是告诉浏览器 函数fb是对象obja的一个属性 ,这时候去问 fb在哪? ,答:obja, this = obja

3,fc()

fc是obja.fb的引用,这里有一点需要注意this的指向是在 执行阶段 确定的, fc和fa的执行方式是一样的,运动会比赛时穿同样的校服所以是同一个学校的 ,问: fc在哪? ,答:和fa一样全局作用域, this = window

4,fa.call(objb) / fa.apply(objb)

进行跑步比赛时同一个学校的学生会被分到一个跑道上面去,在javascript中这个过程通过 callapply 实现。运动员fa在跑道objb学校的跑道上面跑,问: fa在哪? 答:objb, this = objb

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。