This website requires JavaScript.

实现一个Call函数

call()方法是使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或者方法

  • call2接收传入的参数
  • 从第二个参数到最后一个参数将会是call2方法除了指定this值之外的若干参数
  • 将要函数设置为对象的属性
  • 执行该函数(eval)
  • 删除该函数
Function.prototype.call2 = function (context){ //判断传入是否为null, 如果为null 就直接指向window var context = context || window; //获取调用call的函数,用this获取 context.fn = this; var args = []; //参数值不确定,直接用for循环 arguments类数组对象。 for(var i = 1, len = arguments.length; i < len; i++){ args.push('arguments['+ i +']'); } //最后得到args是[arguments[1], argument[2],...] //使用eval进行函数执行 //从第二个参数到最后一个参数作为 var res = eval('context.fn('+ args +')'); //最后删除这个函数fn, 因为他是新增在obj属性中,不是我们想要的,所以删掉 delete context.fn; return res; }

//测试
var result = 2;
var obj = {value :1};
function bar(name,age){
console.log(this.value);
return {
value: this.value,
name: name,
age: age
}
}

bar.call(null); //2
console.log(bar.call2(obj, 'kevin', 18));

© 2020 Copyright