call、apply方法实现

//1.实现call方法
	let obj = {
	    value: 88
	}
	function fn(age,name){
	    console.log(this.value)
	    console.log(age)
	    console.log(name)
	}
		
	Function.prototype.mycall = function(obj){
	    let argus = [];
	    for(var i=1;i<arguments.length;i++){
		   argus.push(arguments[i])
	    }
	    // console.log(argus)
	    //将函数做为对象的一个属性那么直接经过对象调用函数里面的this自动指向该对象
	    obj = obj || window;   //若是传入的第一个参数为null时,那么指向window
	    obj.func = this;
	    //将传过来的参数使用扩展运算符
	    obj.func(...argus);
	    delete obj.func;
	 }
	// fn.mycall(obj,23,'lb');
		
	//2.实现apply方法
	Function.prototype.myapply = function(obj){
	    let argus = arguments[1]; //获取第一个以后的参数
	    obj.func = this;
	    obj = obj || window;     //若是myapply调用时第一个参数是null,就指向window
	    obj.func(...argus);   //将argus类数组使用扩展运算符转化为参数序列形式,而且以逗号隔开
            delete obj.func;
	}
	fn.myapply(obj,[23,'lb'])   //apply后面传递参数的方式是数组形式`复制代码
相关文章
相关标签/搜索