call和apply是為了動態改變this而出現的,當一個object沒有某個方法,但是其他的有,我們可以藉助call或apply用其它物件的方法來操作。本文主要為大家詳細介紹了js中apply與call簡單用法,具有一定的參考價值,有興趣的夥伴們可以參考一下,希望能幫助大家。
call, apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function物件實例,也就是每個方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當然是針對方法的了.這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同.
從上面可以得出call, apply是給方法使用的,為了改變呼叫該方法的this指標
簡單範例:
call
function A() { this.getName = function (xx) { return xx; } } function B() { } var a = new A(); console.log( a.getName('i am A') ); //i am A var b = new B() ; console.log( a.getName.call(b,'i am B') ); // i am B
B 函數中沒有任何方法, A 函數有個getName( ) 方法,a.getName() 自然成立,但B 也要使用getName() 的方法怎麼辦呢? 那就用 call(this,'參數') ! !
可以再理解這句話-- 我們可以藉助call或apply呼叫其它物件的方法來操作,call和apply是為了動態改變this而出現的,本來a.getName() 的this 指向a, call 動態的把this 指向了b ,變成了b.getName()
apply
apply 與call 只是參數的使用不同而已
function A() { this.sun = function (a ,b) { return a+b; } } function B() { } var a = new A(); console.log( a.sun(1,2) ); //3 var b = new B() ; console.log( a.sun.call(b,2,2) ); // 4 console.log( a.sun.apply(b,[3, 3]) ); //6
call和apply一般使用情況
用的比較多的,透過document.getElementsByTagName選擇的dom 節點是一種類似array的array。它不能應用Array下的push,pop等方法。我們可以透過:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以套用Array下的所有方法了。
相關推薦:
javascript改變函數體內部指向的apply與call用法實例詳解
Js的this指向 apply().call(),bind()的問題
#以上是詳解js中apply與call簡單用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!