手寫call和apply方法實現

2021-10-03 18:24:25 字數 1248 閱讀 9201

call

var name =

'flten'

;var obj =

;function

fn(a, b, c)

; function.prototype.

mycall

=function

(obj)

// console.log(args);

//最重要的一步!說明了兩個問題:1.mycall內部的this是指向呼叫者fn函式(物件的);2.obj.func就是fn函式,obj物件呼叫了fn函式,因此fn函式內部的this指向obj

obj.fn =

this

;var result =

eval

("obj.fn("

+args+

")")

;delete obj.fn;

return result;

}//1.函式也是物件,因此這裡的fn作為函式物件呼叫了mycall

總是指向他的呼叫者

fn.mycall

(obj,

"我的"

,"名字"

,"是");

// 我的名字是軒靈

var name =

'flten'

;var obj =

;function

fn(a, b, c)

; function.prototype.

=function

(obj,arr)

else

// console.log(args);

//最重要的一步!說明了兩個問題:1.mycall內部的this是指向呼叫者fn函式(物件的);2.obj.func就是fn函式,obj物件呼叫了fn函式,因此fn函式內部的this指向obj

obj.fn =

this

;var result =

eval

("obj.fn("

+args+

")")

;delete obj.fn;

return result;}}

//1.函式也是物件,因此這裡的fn作為函式物件呼叫了mycall!

總是指向他的呼叫者

fn.(obj,

["我的"

,"名字"

,"是"])

;// 我的名字是軒靈

apply 方法和call 方法

obj.func.call obj1 是將obj1看做obj,呼叫func方法,將第乙個引數看做函式呼叫的物件,可以看做,將obj的方法給obj1使用 在函式體內this的值就是指向這個呼叫者,也就是第乙個引數,剩餘的引數都是需要傳遞給函式的值 例如 function add a,b return ...

玩轉方法 call和apply

在ecmascript v3中,給function原型定義了這兩個方法,這兩個方法的作用都是一樣的 使用這兩個方法可以像呼叫其他物件方法一樣呼叫函式,這句話是從書上抄的,至少我是沒讀明白這是什麼意思。下面說簡單易懂的,先看段 複製 如下 function introduce name,age var...

手寫call方法

關鍵字 call,function.prototype.call 自己來實現乙個call方法。語法 fn.call context arg1 call幹了些啥?繫結this到第乙個實參 執行函式並返回結果 function result context.fn args 用完後就刪除 delete c...