實現call和apply

Function.prototype.myCall = function (context) {
		 var context = context || window
		  console.log(context,this)
		  // 給 context 添加一個屬性
		  // getValue.call(a, 'yck', '24') => a.fn = getValue
		  context.fn = this
		  // 將 context 後面的參數取出來
		  var args = [...arguments].slice(1)
		  // getValue.call(a, 'yck', '24') => a.fn('yck', '24')
		  var result = context.fn(...args)
		  // 刪除 fn
		  delete context.fn
		  return result
		}複製代碼

Function.prototype.myApply = function (context) {
		  var context = context || window
		  context.fn = this

		  var result
		  // 須要判斷是否存儲第二個參數
		  // 若是存在,就將第二個參數展開
		  if (arguments[1]) {
		    result = context.fn(...arguments[1])
		  } else {
		    result = context.fn()
		  }

		  delete context.fn
		  return result
		}複製代碼
相關文章
相關標籤/搜索