call函数的理解

call() 用来改变this的指向,先来看下call函数的用法。

function fn(){
	console.log(this.a, this.b);
}

fn(); //  undefined undefined

let c = {
	'a': 12,
	'b': 24
}

fn.call(c); // 12  24

再来看下这个小栗子(原文地址:https://www.cnblogs.com/donghezi/p/9742778.html


function fn1() { 
    console.log('fn1----', this);
}

function fn2() { 
    console.log('fn2-----', this);
}

fn1.call(fn2);  //fn1---- function fn2() {    重点一
                //    console.log('fn2-----', this);
                //}

实现一个简易的call函数:

// ES6 call 实现
Function.prototype.es6Call = function (context) {
  var context = context || window;
  context.fn = this;
  var args = [];
  for (var i = 1, len = arguments.length; i < len; i++) {
    args.push('arguments[' + i + ']');
  }
  const result = context.fn(...args);
  delete context.fn;
  return result;
}
//原文:https://blog.csdn.net/u010377383/article/details/80646415 

这里的 context.fn = this; this其实就是上边例子输出的 fn2函数.
args.push('arguments[' + i + ']'); 相当于是在数组中放入了[ arguments[1], arguments[2], ... ]

文章首发: https://mrceel.cn/call函数理解/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值