5 模擬實現call和apply

2022-07-26 08:51:08 字數 1135 閱讀 5077

1、先來看call的乙個例子

1

var value = 1;

2var foo =;56

function

bar()

910 bar.call(foo); //

1

猜想:假設在執行call的時候,把bar函式新增到foo物件下,執行foo.bar,具體如下:

1

var foo =6};

78 foo.bar(); //

1

這就是我們模擬實現的第一步;

2、實現call函式,就得了解call函式執行的過程,如下:

①:this 引數可以傳null或者undefined,此時 this 指向 window

②:this 引數可以傳基本型別資料,原生的 call 會自動用 object() 轉換

③:函式是可以有返回值的

1 function.prototype.call2 = function

(context) 910

var result = eval('context.fn(' + args +')');

1112

return result; //

實現細節 ③

13 }

3、收尾:context多了乙個fn屬性,在結尾用delete將其刪除

1 function.prototype.call2 = function

(context) 910

var result = eval('context.fn(' + args +')');

1112

delete context.fn//

刪除多餘屬性fn

13return

result;

14 }

(context, arr) else

14 result = eval('context.fn(' + args + ')');15}

1617

delete

context.fn

18return

result;

19 }

call和apply的模擬實現

一句話介紹 call call 方法在使用乙個指定的 this 值和若干個指定的引數值的前提下呼叫某個函式或方法。舉個例子 var foo function bar bar.call foo 1 注意兩點 call 改變了 this 的指向,指向到 foo bar 函式執行了 那麼我們該怎麼模擬實現...

js模擬實現call和apply方法

call 方法在使用乙個指定的 this 值和若干個指定的引數值的前提下呼叫某個函式或方法。例子 var foo function bar bar.call foo 2從這個例子中可以看出兩點 上述例子試想當呼叫 call 的時候,把 foo 物件改造成如下 var foo foo.bar 2這個時...

js中call和apply的模擬實現

示例 call的正常使用 var key windowk var obj function fn name,age fn lucy 20 name lucy age 20 this.key windowk fn.call obj,lucy 20 name lucy age 20 this.key o...