国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

全面解析JavaScript中apply和call以及bind(推薦)

2019-11-20 09:41:52
字體:
來源:轉載
供稿:網友

函數調用方法

在談論JavaScript中apply、call和bind這三兄弟之前,我想先說下,函數的調用方式有哪些:

•作為函數

•作為方法

•作為構造函數

•通過它們的call()和apply()方法間接調用

前面的三種調用方法,我們都知道且不在這篇文章的討論范圍內,就不說了。

下面我們來說說這第四種調用方法

通過call()和apply()間接調用

其實,我們可以將這兩個函數看做是某個對象的方法,通過調用方法的方式來間接調用函數:

function f(){}f.call(o);f.apply(o); 

call()和apply()的第一個參數是要調用函數的母對象,它是調用上下文,在函數體內通過this來獲得對它的引用。

那么他們是一樣的,還是有區別的,還有bind方法呢?君莫急,下面詳細的解析他們三者的區別和聯系。

call()

call()方法給調用它的方法指定特定的this指針(習慣用語,不要和我糾結它的正確性)和參數。例如有這么一個函數:

var fn = function (arg1, arg2) {console.log(this, arg1, arg2); } 

我來調用它:

fn.call(null, 'Skylor', 'min'); //1fn.call(undefined, 'Skylor', 'min'); //2var fx = function() {}fn.call(fx, 'Skylor', 'min'); //3 

這三個call方法的返回值是什么呢?不廢話,請看:

1. null "Skylor" "min"2. undefined "Skylor" "min"3. fx "Skylor" "min" 

真的是這樣嗎,機智的你,去瀏覽器控制臺小試了一下,我去,你這坑貨,不是這樣的:

chrome1. Window "Skylor" "min"2. Window "Skylor" "min"3. fx "Skylor" "min" 

好吧,你機智。但這已經很好的說明了call方法了。(window很高級,微軟偷笑中...)

我們注意到call方法,第一個參數是指定this指針,后面每個參數指定需要的參數,注意我用的是“每個”,這意味著你需要幾個參數就要想調用函數那樣,一個個參數寫進去。

apply()

apply()是call()的兄弟啊,其他地方長的都一樣,都是男的,就一個地方不一樣。先看例子:

fn.apply(null, ['Skylor', 'min']); //1fn.apply(fx, ['Skylor', 'min']); //2 

哥們,你是不是寫錯了,多了個中括號啊。不,不,不,這就是他和call長的不一樣的地方,它的第二個參數是個需要的參數Array。

bind()

bind()嘛,他們三個不是仨兄弟嘛,,這個我懂,blabla....不不不,它是和apply、call結拜的兄弟,不是親兄弟。

當然,bind方法也是允許你指定this指針,但是它不是調用函數,而是返回一個(或者說是拷貝)調用它的函數的函數,并給這個函數指定特定的this指針和參數。慣例,例子說明一切:

var fnbound = fn.bind(null, 'Skylor', 'min'); 

這時,fnbound是一個函數,一個this指向null,參數為['Skylor', 'min']的另一個函數。調用之:

fnbound();

結果:

null, 'Skylor', 'min'

不要和我糾結Window的事了。。。。。

bind和其他兩個兄弟不一樣的地方,是,它不是調用函數,而是返回一個新的函數,同樣,它也是指定this指針和參數的,指定參數的方式和call一樣,是一個一個來的。

最后來一個例子唄:

var shoppingCart = (function(){var _calculatePrice = function () {return this.price * this.amount;};return {calculatePrice : _calculatePrice}})();var goods = {name : ‘hammer',price: 199,amount : 2};shoppingCart.calculatePrice.call(goods); 

到此結束。!

以上所述是小編給大家介紹的JavaScript中apply和call以及bind(推薦)的全部內容,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临猗县| 平谷区| 金山区| 丹阳市| 视频| 通辽市| 二连浩特市| 澎湖县| 庆元县| 正蓝旗| 建阳市| 通河县| 南召县| 长白| 景宁| 无为县| 鄯善县| 鲁山县| 太原市| 鹤山市| 凉城县| 大庆市| 东阳市| 古田县| 莲花县| 铜鼓县| 东乌珠穆沁旗| 屏东市| 佛学| 山西省| 巫溪县| 巢湖市| 呼伦贝尔市| 城口县| 政和县| 德州市| 柳江县| 迭部县| 温泉县| 五家渠市| 会泽县|