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後面傳遞參數的方式是數組形式`複製代碼
相關文章
相關標籤/搜索