js中apply與call簡單用法詳解
你可以直接看例子,也可以先讀一下介紹:
call和apply是為了動態(tài)改變this而出現(xiàn)的,當一個object沒有某個方法,但是其他的有,我們可以借助call或apply用其它對象的方法來操作。
call, apply都屬于Function.prototype的一個方法,它是JavaScript引擎內(nèi)在實現(xiàn)的,因為屬于Function.prototype,所以每個Function對象實例,也就是每個方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當然是針對方法的了.這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同.
從上面可以得出 call, apply 是給方法使用的,為了改變調(diào)用該方法的 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 函數(shù)中沒有 任何方法 , A 函數(shù)有個 getName() 方法 ,a.getName() 自然成立 ,但 B 也要使用 getName() 的方法怎么辦呢 ? 那就用 call(this,'參數(shù)') ??!
可以 再理解一下這句話 -- 我們可以借助call或apply調(diào)用其它對象的方法來操作,call和apply是為了動態(tài)改變this而出現(xiàn)的 ,本來 a.getName() 的 this 指向 a, call 動態(tài)的 把 this 指向了 b ,變成了 b.getName()
apply
apply 與 call 只是參數(shù)的使用不同而已
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 節(jié)點是一種類似array的array。它不能應用Array下的push,pop等方法。我們可以通過:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以應用Array下的所有方法了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
uniapp實現(xiàn)微信一鍵登錄按鈕樣式(膠囊按鈕的樣式)
這篇文章主要介紹了uniapp實現(xiàn)微信一鍵登錄按鈕樣式,如何開發(fā)膠囊按鈕的樣式,需要的朋友可以參考下2024-07-07Bootstrap 實現(xiàn)表格樣式、表單布局的實例代碼
這篇文章主要介紹了Bootstrap 實現(xiàn)表格樣式、表單布局的實例代碼,需要的朋友可以參考下2018-12-12基于Electron實現(xiàn)桌面應用開發(fā)代碼實例
這篇文章主要介紹了基于Electron實現(xiàn)桌面應用開發(fā)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07