美文网首页
浅谈call/apply/bind

浅谈call/apply/bind

作者: 小仙有毒_1991 | 来源:发表于2020-08-14 10:23 被阅读0次

经常使用bind/ call/apply你是否想过他们是怎么实现的?

讲一下call的实现原理,
call 返回函数执行的结果

Function.prototype.call = function (context,...args){
  context = context === null ? window : context;//上下文
  if(!/^(object | function )$/i.test(typeof context)){
    context = Object(context);
  }
  let result;
  let key = Symbol('key');
  context[key] = this;// this 代表当前方法
  result = context[key](...args);
  delete context[key];
  return result;

思考一下bind 是如何实现的?
bind 会创建一个函数

Function.propotype.bind = function(context,...outerArgs){//outArgs bind时传入的参数
  let _this = this;// 保存this,即调用bind方法的目标函数
  return function(...innerArgs){// innerAtgs bind创建的函数执行时传入的参数 
    let args = outerArgs.concat(innerArgs);
     _this.call(context,...args );
  }
}
// ...args方案 代替了  Array.protptype.slice.call(arguments);

相关文章

网友评论

      本文标题:浅谈call/apply/bind

      本文链接:https://www.haomeiwen.com/subject/xtupdktx.html