手动实现一个call bind

一、call的实现(apply类似)

复制代码
//完成版
Function.prototype.setCall = function (obj){
  var object = obj || window
  let arr = [...arguments]
  arr.splice(0,1)
  object.func = this // 将函数变成对象的内部属性
  object.func(...arr)  // 指定函数 并传入参数
  delete object.func // 删除函数,当做什么都没发生~
}
// test:
var foo = {
  value: 1
};
function show(a,b) {
  console.log(this.value);
  console.log(a+b)
};
show.setCall(foo,2,4)
复制代码

二、bind的实现

复制代码
//完成版
Function.prototype.setBind = function (obj){
  var _this = this
  return function (){
    _this.apply(obj,arguments)
  }
}

//test
var obj = {
  name: 1,
  getName: function(){
    console.log(this.name)
  }
};

var func = function(){
  console.log(this.name);
}.bind(obj);

func(); // 1
复制代码

 

posted @   菜鸟小何  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示