this指向及改变的方法

函数的调用方法决定了this的指向

  1. 普通函数定义(指向window)

    function A(){
        console.log(this)
    }
    A()
  2. 构造函数定义(指向实例对象)

    function people(name,age){
        this.name=name
        this.age=age
    }
    var people1=people('A',19)
    var people2=people('B',19)
  3. 对象方法调用(指向这个对象)

    var obj={
        fn:function(){
            console.log(this)
        }
    }
    obj.fn()
  4. 事件绑定的方法(指向绑定的元素)

  5. 定时器(指向window)


改变this指向的方法

  1. call()

    语法:call(thisobj,[argq,arg2])

    定义:调用一个对象的一个方法,以另一个对象替换当前对象

    括号里面的原本的对象改为call()前面的对象、即用thisobj代替call前面的东西,最终用thisobj这个对象去执行call前面的方法。

    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 第二个参数及以后表示传进去的实参

  2. apply()

    语法:apply(thisobj,[argArray])

    定义:应用某一个对象的一个方法,用别另一个对象替换当前对象

    说明:

    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

  3. bind()   

         语法:bind(thisobj,参数列表(但是这个参数列表可以分多次传入))。

         说明:返回有指定的 this 值 和初始化参数改变的原函数拷贝

function fn(...args){
    console.log(this,args);
}
let obj = {
    name:"A"
}

const bindFn = fn.bind(obj); 
bindFn(1,2) 
fn(1,2) 

区别:

  1. call和apply改变this指向后,直接进行函数调用

  2. bind则是仅做改变,不做执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值