首頁  >  文章  >  web前端  >  Javascript中function函數call方法實例用法詳解

Javascript中function函數call方法實例用法詳解

伊谢尔伦
伊谢尔伦原創
2017-07-20 14:07:264029瀏覽

Function.prototype.call()

 函數實例的call方法,可以指定函數內部this的指向(即函數執行時所在的作用域),然後在所指定的作用域中,呼叫該函數。並且會立即執行該函數。

 看個例子來好好理解這段話。


 var keith = {
 rascal: 123
 };
 var rascal = 456;
 function a() {
 console.log(this.rascal);
 }
 a(); //456
 a.call(); //456
 a.call(null); //456
 a.call(undefined); //456
 a.call(this); //456
 a.call(keith); //123

上面程式碼中,a函數中的this關鍵字,如果指向全域對象,回傳結果為456。可以看到,如果call方法沒有參數,或參數為null或undefined或this,則等同於指向全域物件。如果使用call方法將this關鍵字指向keith對象,也就是將該函數執行時所在的作用域為keith對象,返回結果為123。

call()方法可以傳遞兩個參數。第一個參數是指定函數內部中this的指向(也就是函數執行時所在的作用域),第二個參數是函數呼叫時需要傳遞的參數。


function keith(a, b) {
 console.log(a + b);
 }
keith.call(null, 1, 2); //3

第一個參數是必須的,可以是null,undefined,this,但是不能為空。設定為null,undefined,this表示函數keith此時處於全域作用域。第二個參數中必須一個個要加。而在apply中必須以數組的形式添加。

call方法的一個應用程式是呼叫物件的原生方法。也可以用於將類別數組物件轉換為數組。


var obj = {};
 console.log(obj.hasOwnProperty('toString')); //false
 obj.hasOwnProperty = function() {
 return true;
 }
 console.log(obj.hasOwnProperty('toString')); //true
 console.log(Object.prototype.hasOwnProperty.call(obj, 'toString')); //false

上面程式碼中,hasOwnProperty是obj物件繼承的方法,如果這個方法一旦被覆寫,就不會得到正確結果。 call方法可以解決這個方法,它將hasOwnProperty方法的原始定義放到obj物件上執行,這樣無論obj上有沒有同名方法,都不會影響結果。要注意的是,hasOwnProperty是Object.prototype原生物件的方法,而call是繼承自Function.prototype的方法。

以上是Javascript中function函數call方法實例用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn