摘要:,,和都是用來改變函數執行時的上下文也就是說改變的指向問題,是的方法,引入是因為沒有將設置成行參。一般都是庫里面用不推薦自己使用和。和唯一區別是參數不一樣,是的語法糖是返回一個新函數供以后調用,相比其他兩個比較常用。而和是立即調用。
apply(),call(),和bind()都是用來改變函數執行時的上下文也就是說改變this的指向問題,是prototype的方法,引入是因為js沒有將this設置成行參。一般都是庫里面用不推薦自己使用call和apply。
call()和apply()唯一區別是參數不一樣,call()是apply()的語法糖;
bind()是返回一個新函數供以后調用,相比其他兩個比較常用。而apply()和call()是立即調用。
如果不需要關心具體有多少參數被傳入函數,選用apply();
如果確定函數可接收多少個參數,并且想一目了然表達形參和實參的對應關系,用call();
如果我們想要之后再調用方法,不需立即得到函數返回結果,使用bind();
apply()
使用 apply, 你可以繼承其他對象的方法:
這里apply()的第一個參數是null,在非嚴格模式下,第一個參數為null或者undefined時會自動替換為指向全局對象,apply()的第二個參數為數組或類數組。
call()
call()是apply()的語法糖,作用和apply()一樣,同樣可實現繼承,唯一的區別就在于call()接收的是參數列表,而apply()則接收參數數組。
bind()
bind()的作用與call()和apply()一樣,都是可以改變函數運行時上下文,區別是call()和apply()在調用函數之后會立即執行,而bind()方法調用并改變函數運行時上下文后,返回一個新的函數,供我們需要時再調用。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106186.html
摘要:理解文章中已經比較全面的分析了在中的指向問題,用一句話來總結就是的指向一定是在執行時決定的,指向被調用函數的對象。與和直接執行原函數不同的是,返回的是一個新函數。這個新函數包裹了原函數,并且綁定了的指向為傳入的。 理解 JavaScript this 文章中已經比較全面的分析了 this 在 JavaScript 中的指向問題,用一句話來總結就是:this 的指向一定是在執行時決定的,...
摘要:輸出的作用與和一樣,都是可以改變函數運行時上下文,區別是和在調用函數之后會立即執行,而方法調用并改變函數運行時上下文后,返回一個新的函數,供我們需要時再調用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改變函數運行時上下文,最終的返回值是你調用的方法的返回值,若該方法沒有返回值,則返回undefined。這幾個方法...
摘要:它們有明確的和成員函數的定義,只有的實例才能調用這個的成員函數。用和調用函數里用和來指定函數調用的,即指針的指向。同樣,對于一個后的函數使用或者,也無法改變它的執行,原理和上面是一樣的。 函數里的this指針 要理解call,apply和bind,那得先知道JavaScript里的this指針。JavaScript里任何函數的執行都有一個上下文(context),也就是JavaScri...
總結call,apply,bind方法的理解使用和區別。 call,apply,bind這三個方法在JavaScript中是用來改變函數調用的this指向。那么改變函數this指向有什么用呢?我們先來看一段代碼 var a= { name:harden, fn:function () { console.log(this.name); } } var b =...
在上一篇文章(《javascript高級程序設計》筆記:Function類型)中稍微提及了一下函數對象的屬性—this,在這篇文章中有深入的說明: 函數的三種簡單調用模式 1 函數模式 定義的函數,如果單獨調用,不將其與任何對象關聯,那么就是函數調用模式 function fn(num1, num2) { console.log(this); } // 直接在全局調用 fn();// w...
閱讀 1848·2021-11-22 15:24
閱讀 1307·2021-11-12 10:36
閱讀 3194·2021-09-28 09:36
閱讀 1836·2021-09-02 15:15
閱讀 2745·2019-08-30 15:54
閱讀 2391·2019-08-30 11:02
閱讀 2391·2019-08-29 13:52
閱讀 3539·2019-08-26 11:53