浅谈Javascript中的关键字:this

 

 

一、什么是this?

    this简单来说就是当前执行对象的上下文,它总是指向该对象的作用域。

 

二、介绍this

1、纯粹的函数调用

    在js中我们声明的全局变量、函数方法都是一个对象(即一切皆对象的理论)。他们声明之后都是挂载在window对象下,可以把他们理解为window对象的一个属性。
    如: var n = 5;

            function f() {}

    等同于window.n和window.f,全局window可以省略不写

161021_ZHt0_3381985.png

此时的this是指向window对象的,是全局Global。那么,如果在方法f()内,this指向哪里呢?

161645_X5ys_3381985.png

    也是指向全局window对象。为什么呢?我们可以这么理解,当我们想要知道一个this的指向时,不是只关注this是在哪个对象里面的,我们可以去观察这个this的引用对象,通过作用域链,确定当前被操作的实际对象,对于例子中的this,他的执行上下文就相当于window.f。所以window就是这个被操作对象。

2、this被作为对象方法调用

    如: function f() {

           console.log(this.x);

        }

        var n = {};

        n.x = 4;

        n.t = f;

        n.t();    //    4

    此时的this就是指向被调用的上级对象

3、作为构造函数调用

        var x = 2;

        function f(){

    this.x = 10;

   }

  var o = new f();

  alert(o.x); // 10

       此时的this指向新的构造函数

4、通过apply()和call()

    通常我们有时需要改变当前作用域,如:

     var slef = this;

    除了声明一个变量等于当前this之外,可以通过call()和apply()方法。call()和apply()方法功能类似,区别于后面的参数

    a.call(b,arg1,arg2…)

    apply(b,[arg1,arg2]) //apply只有2个参数,它将call的参数(arg1,arg2…)放在一个数组中作为apply的第二参数

    此时this就是第一个参数,即被改变的操作对象的作用范围。

 

转载于:https://my.oschina.net/AndyShang/blog/908326

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值