JavaScript中绑定this的方法

this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象

简单说,this就是属性或方法“当前”所在的对象。

代码示例:

function f() {
    return '姓名:'+ this.name;
}

var A = {
    name: '张三',
    describe: f
};

var B = {
    name: '李四',
    describe: f
};

console.log(A.describe()) // "姓名:张三"
console.log(B.describe()) // "姓名:李四"

可以看到this就是指向当前所在的对象,第一个输出语句所在的对象是A,此时this就指向A这个对象,第二个输出语句就指向B这个对象。

接下来再看一个例子:


var user = {
    name:'张三',
    age: 20,
    describe: function (){
        setTimeout(function (){
            console.log('姓名:'+this.name)
        },1000)
    }
}
user.describe() //此时this指向的是window

当然这里给一个解决方案:

var user = {
    name:'张三',
    age: 20,
    describe: function (){
        let $this = this;
        setTimeout(function (){
            console.log( '姓名:'+$this.name)
        },1000)
    }
}
user.describe()

可以看到我们在定时器之前设置了一个$this来获取到了指向user的this,后续我们也只调用$this.

当然不止这一种困扰我们的情况,接下来我就只给出三个绑定this指向的方法:

Function.prototype.call() 

函数实例的call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数

var obj = {};

var f = function () {
  return this;
};

f() === window // true
f.call(obj) === obj // true

上面代码中,全局环境运行函数f时,this指向全局环境(浏览器为window对象);call方法可以改变this的指向,指定this指向对象obj,然后在对象obj的作用域中运行函数f

call的第一个参数就是this所要指向的那个对象(如果参数为空、nullundefined,则默认传入全局对象。),后面的参数则是函数调用时所需的参数。

func.call(thisValue, arg1, arg2, ...)

Function.prototype.apply()

apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数,使用格式如下。

func.apply(thisValue, [arg1, arg2, ...])

Function.prototype.bind()

bind()方法用于将函数体内的this绑定到某个对象,然后返回一个新函数,它与上面两个的区别就是不调用函数而是返回一个函数。

var fun1 = fun2.bind(obj);

此时fun1与fun2的区别就是fun1指向obj对象。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值