首頁 >web前端 >js教程 >js中apply與call使用詳解(附程式碼)

js中apply與call使用詳解(附程式碼)

php中世界最好的语言
php中世界最好的语言原創
2018-04-16 09:30:321414瀏覽

這次帶給大家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中文網其它相關文章!

推薦閱讀:

Angular 4中顯示CSS樣式

vue元件怎麼實作猜數字功能

以上是js中apply與call使用詳解(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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