摘要:你可以直接看例子,也可以先讀一下介紹和是為了動態改變而出現的,當一個沒有某個方法,但是其他的有,我們可以借助或用其它對象的方法來操作。它不能應用下的等方法。這一段來源知乎楊志
你可以直接看例子,也可以先讀一下介紹:
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下的所有方法了。 --這一段來源: 知乎-楊志
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80418.html
摘要:也就是說,區別就是,當你希望改變上下文環境之后并非立即執行,而是回調執行的時候,使用方法而則會立即執行函數。 - call、apply:在 javascript 中,call 和 apply 都是為了改變某個函數運行時的上下文(context)而存在的,換句話說,就是為了改變函數體內部 this 的指向。 JavaScript 的一大特點是,函數存在「定義時上下文」和「運行時上下文」以...
摘要:來自朋友去某信用卡管家的做的一道面試題,用原生模擬的方法,不準用和方法。他們的用途相同,都是在特定的作用域中調用函數。不同之處在于,方法傳遞給調用函數的參數是逐個列出的,而則是要寫在數組中。 本文首發我的個人博客:前端小密圈,評論交流送1024邀請碼,嘿嘿嘿?。 來自朋友去某信用卡管家的做的一道面試題,用原生JavaScript模擬ES5的bind方法,不準用call和bind方法。 ...
摘要:來自朋友去某信用卡管家的做的一道面試題,用原生模擬的方法,不準用和方法。他們的用途相同,都是在特定的作用域中調用函數。不同之處在于,方法傳遞給調用函數的參數是逐個列出的,而則是要寫在數組中。 本文首發我的個人博客:前端小密圈,評論交流送1024邀請碼,嘿嘿嘿?。 來自朋友去某信用卡管家的做的一道面試題,用原生JavaScript模擬ES5的bind方法,不準用call和bind方法。 ...
閱讀 2790·2023-04-26 01:47
閱讀 3599·2023-04-25 23:45
閱讀 2476·2021-10-13 09:39
閱讀 614·2021-10-09 09:44
閱讀 1802·2021-09-22 15:59
閱讀 2780·2021-09-13 10:33
閱讀 1729·2021-09-03 10:30
閱讀 665·2019-08-30 15:53