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...