這次帶給大家js中apply與call使用詳解(附程式碼),js中apply與call使用的注意事項有哪些,以下就是實戰案例,一起來看一下。
你可以直接看例子,也可以先讀介紹:
call和apply是為了動態改變this而出現的,當一個object沒有某個方法,但是其他的有,我們可以藉助call或apply用其它對象的方法來操作。
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下的所有方法了。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是js中apply與call使用詳解(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!