js 難點之call,apply實現

2022-07-21 03:30:12 字數 1799 閱讀 1274

1 }; function

bar() bar.call(foo); // 1

bar 函式執行了

1, bar

:function() }; foo.bar(); // 1

執行該函式

刪除該函式

foo.fn

= bar // 第二步

foo.fn() // 第三步

delete

foo.fn

function.prototype.call2

=function(context) // 測試一下

var foo = ; function

bar() bar.call2(foo); // 1

1 }; function

bar(name, age) bar.call(foo, 'kevin'

, 18); // kevin

// 18

// 1

// arguments =

// 因為arguments是類陣列物件,所以可以用for迴圈

var args = ; for(var i =

1, len =

arguments.length; i < len; i++) // 執行後 args為 ["arguments[1]", "arguments[2]", "arguments[3]"]

context.fn(args.join(','

)) // (o_o)??

// 這個方法肯定是不行的啦!!!

+ args +

')')

function.prototype.call2

=function(context) eval('context.fn('

+ args +

')'); delete

context.fn; } // 測試一下

var foo = ; function

bar(name, age) bar.call2(foo, 'kevin'

, 18); // kevin

// 18

// 1

1; function

bar() bar.call(null); // 1

1 } function

bar(name, age) } console.log(bar.call(obj, 'kevin'

, 18)); // object

function.prototype.call2

=function (context) var result =

eval('context.fn('

+ args +

')'); delete

context.fn

return result; } // 測試一下

var value =

2; var obj = function

bar(name, age) } bar.call2(null); // 2

console.log(bar.call2(obj, 'kevin'

, 18)); // 1

// object

=function (context, arr) else result =

eval('context.fn('

+ args +

')') } delete

context.fn

return result; }

js物件之call,apply方法

首先我們來看看call如何借調方法 下面來演示一下 這樣就行了,注意被借調的不管是原型物件方法還是私有的方法只要是這個例項的屬性裡面有的都可以借調,換句話說,由建構函式例項化出來的內容都可以被借調,而這個例項出來的物件裡面含有建構函式裡面的內容和原型物件裡面的內容。有人碩這樣乙個乙個的借調有點麻煩,...

js深入之call apply和bind模擬實現

var foo function fn fn.call foo 1注意 1 call改變了this的指向,指到foo 2 fn函式執行 即可將上面的 改變成下面這種形式 var foo foo.fn 1即將fn作為物件foo的屬性,然後進行呼叫。則可總結出模擬實現的步驟 1 將函式設定為物件的屬性,...

JS學習筆記之call apply的用法

var func function a,b,c 複製 var func function a,b,c func.call null,1,2,3 複製 var func function a,b,c 複製 如果是嚴格模式下,函式體內的this還是null var func function a,b,c...