1、先來看call的乙個例子
1var value = 1;
2var foo =;56
function
bar()
910 bar.call(foo); //
1
猜想:假設在執行call的時候,把bar函式新增到foo物件下,執行foo.bar,具體如下:
1var 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...