函數實例的call方法,可以指定該函數內部this的指向(即函數執行時所在的作用域),然后在所指定的作用域中,調用該函數。并且會立即執行該函數。
看個例子來好好理解這段話。
上面代碼中,a函數中的this關鍵字,如果指向全局對象,返回結果為456。可以看到,如果call方法沒有參數,或者參數為null或undefined或者this,則等同于指向全局對象。如果使用call方法將this關鍵字指向keith對象,也就是將該函數執行時所在的作用域為keith對象,返回結果為123。
call()方法可以傳遞兩個參數。第一個參數是指定函數內部中this的指向(也就是函數執行時所在的作用域),第二個參數是函數調用時需要傳遞的參數。
第一個參數是必須的,可以是null,undefined,this,但是不能為空。設置為null,undefined,this表明函數keith此時處于全局作用域。第二個參數中必須一個個添加。而在apply中必須以數組的形式添加。
call方法的一個應用是調用對象的原生方法。也可以用于將類數組對象轉換為數組。
上面代碼中,hasOwnProperty是obj對象繼承的方法,如果這個方法一旦被覆蓋,就不會得到正確結果。call方法可以解決這個方法,它將hasOwnProperty方法的原始定義放到obj對象上執行,這樣無論obj上有沒有同名方法,都不會影響結果。要注意的是,hasOwnProperty是Object.prototype原生對象的方法,而call是繼承自Function.prototype的方法。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com