首頁  >  文章  >  web前端  >  詳解js中apply與call簡單用法

詳解js中apply與call簡單用法

小云云
小云云原創
2017-12-28 09:14:541401瀏覽

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中的call ()和apply()的理解

Js的this指向 apply().call(),bind()的問題

#

以上是詳解js中apply與call簡單用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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