实现call 和apply

实现call的方法。call的使用方法。function cal(){} var obj = {}  cal.call(obj ,"sam","kavin") 改变指向,传入参数

Function.prototype.call(context){

  //如果对象传入是空或者null的时候指向window

  var context = context || window

  var args = []

  // 首先要获取调用call的函数,用this可以获取

  context.fn = this;

  //我们接着要把这个参数数组放到要执行的函数的参数里面去。

  for(var i =1,len<arguments.length;i<len;i++){

    args.push("arguments("+i+")")

  }

扫描二维码关注公众号,回复: 7361567 查看本文章

  var ret = eval("context.fn("+args+")")

  delete context.fn

  return·ret

}

实现 apply的方法 function cal(){} var obj = {}  cal.call(obj ,["sam","kavin"]) 改变指向,传入参数

Function.prototype.apply2 = function(context,arr){

  var context = context || window;

  var res = ''

  context.fn = this;

  if(!arr){

    res = context.fn()

  }else{

    var arg =[]

    for(var i =0,len=arr.length;i<len;i++){

      arg.push("arr("+i+")")

    }

    res = eval(context.fn(+arg+))

  }

  delete context.fn

  return res 

}

猜你喜欢

转载自www.cnblogs.com/samChens/p/11587110.html