JavaScript function的call()
方法可用來呼叫函式並傳入給定的this
值及其他參數。
語法如下
function.call(thisArg, arg1, arg2, ...)
thisArg
為傳入函式的this
。arg1, arg2, ...
等為傳入函式的參數。
下面範例使用JavaScript的嚴格模式(strict mode),觀察執行結果的差異。
"use strict"; // 嚴格模式
function func(param1, param2){
console.log(this);
console.log(param1);
console.log(param2);
}
console.log('===== func() =====');
func('foo','bar');
console.log('=== func.call() ==');
func.call( {a:1}, 'foo', 'bar' );
執行結果如下
===== func() =====
undefined
foo
bar
=== func.call() ==
{ a: 1 }
foo
bar
函式func()
被呼叫了兩次。第一次用func()
直接呼叫,第二次用func.call()
呼叫,傳入call()
的第一個參數{ a: 1 }
為給定的this
。
在嚴格模式下直接呼叫函式時,函式中的this
為undefined
,如果不是嚴格模式則this
指向global物件,在瀏覽器中為window物件,在node.js中為node.js的global scope object。
不過在使用call()
來呼叫func()
函式時,因為第一個參數會作為函式中的this
,所以印出{ a: 1 }
。
參考:
沒有留言:
張貼留言