运用call、apply、 bind进行强制改变this的指向

运用call、apply、 bind进行强制改变this的指向

改变目标函数内部的this指向并调用该函数

call方法强制改变this的指向

function f() {
    console.log(this);
}

f.call("hello", [55, 66]);
  • 没有直接调用f(),经过f.call()调用f函数内部的call方法间接的调用f函数
  • 如果给的第一个参数不是对象类型,那么将会将该参数转换为对象——基本包装类型,如果该参数无法转换成,那么该参数无效,之前指向谁,现在仍然指向谁——undefined unll
  • 第二个参数开始,就是将参数作为实参传入到f函数

apply方法强制改变this的指向

function f(x, y) {
    console.log(this);
}

f.apply("hello", 66);
  • 没有直接调用f(),经过f.appy()调用f函数内部的apply方法间接的调用f函数
  • 如果给的第一个参数不是对象类型——undefined unll,那么将会将该参数转换为对象——基本包装类型,如果该参数无法转换成,那么该参数无效,之前指向谁,现在仍然指向谁。
  • 第二个参数数组就是要传入到函数的参数列表,数组里面的元素将会被传入到函数。
apply方法的应用

需求:想要得到一个数组中的最大值。

希望能使用Math.max()得到数组中的最大值,结果返回的是NaN,这是因为该函数中传入的必须是数值,如:Math.max(11, 22, 66, 33)

 var arr = [11, 22, 55, 44];

 console.log(Math.max(arr));
 //NaN

apply可以帮助实现打开数组,因此可以使用以下代码进行实现

var arr = [11, 22, 55, 44];

console.log(Math.max.apply(null, arr));
//55      

bind方法强制改变this的指向

function f (x, y) {
    console.log(x + y);
    console.log(this)
}

var ff = f.bind([99], 9, 6);
ff();
//15 
//Array [ 99 ]
console.log(ff === f);
//false
  • 只为f函数改变this指向并返回一个新的函数,换句话说,没有使f函数发生改变
  • 该方法的参数形式与call的参数形式一样,但是bind方法是半自动的,f函数不能自动调用,需要手动调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值