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 }。
參考:
沒有留言:
張貼留言