首頁 >web前端 >js教程 >js中apply與call簡單用法

js中apply與call簡單用法

小云云
小云云原創
2017-12-09 13:29:001398瀏覽

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如何使用call和apply實作繼承用法詳解############JavaScript中call、apply、 bind是做什麼的?為什麼要使用它們? ############詳解JavaScript中apply與call的差異#######

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

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