亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談javascript中call()、apply()、bind()的用法

2019-11-20 12:38:07
字體:
來源:轉載
供稿:網友

call(thisObj,arg1,arg2...)、apply(thisObj,[obj1,obj2...])這二個方法是每個函數都包含的非繼承的方法

call(thisobj[, args])和apply(thisobj[, args])

作用都是一樣的,簡單來說就是改變當前使用該方法的對象中的this指向,指向調用方法中的thisObj對象二者的區別(第一個參數是相同的)就是call方法中傳入的參數是是一個個列舉出來的,而apply方法中的參數二是一個數組

還是舉例說明比較直觀:

window.color='red';var o={color:"blue"};function sayColor(){alert(this.color);};sayColor(); //red(全局函數,this是window)sayColor.call(this);//red(調用call方法,指定對象是this,這里的this是window,沒什么意義)sayColor.call(window);//red(調用call方法,指定對象是window,沒什么意義)sayColor.call(o); //blue (調用call方法,指定對象是o,所以this指代對象o,這里由原來的window指向了o)sayColor.apply(o);//blue (調用call方法,指定對象是o,所以this指代對象o,這里由原來的window指向了o)

ECMAScript5中的bind()方法和前二種方法相似,bind()這個方法會創建一個函數的實例,這個實例的this值會被綁定到傳遞給bind()函數的值

例子:

function a(y){return this.x+y;};var o={x:1};var g=a.bind(o);g(2);//3

從例子中可以看出函數a綁定到對象o上了,并且返回了新的函數g,調用g時,a函數會當作對象o的方法來調用 
bind()這個方法是將函數綁定到某個對象上,并且返回一個新的函數,這個新函數中傳入的參數都將傳入被綁定的函數上。

下面來看看他們的區別

在JS中,這三者都是用來改變函數的this對象的指向的,他們有什么樣的區別呢。
在說區別之前還是先總結一下三者的相似之處:
1、都是用來改變函數的this對象的指向的。
2、第一個參數都是this要指向的對象。
3、都可以利用后續參數傳參。
那么他們的區別在哪里的,先看一個例子。
                var xw = {
                        name : "小王",
                        gender : "男",
                        age : 24,
                        say : function() {
                                alert(this.name + " , " + this.gender + " ,今年" + this.age);                               
                        }
                }
                var xh = {
                        name : "小紅",
                        gender : "女",
                        age : 18
                }
                xw.say();
本身沒什么好說的,顯示的肯定是小王 , 男 , 今年24。

那么如何用xw的say方法來顯示xh的數據呢。

對于call可以這樣:

復制代碼 代碼如下:

xw.say.call(xh);

對于apply可以這樣:

復制代碼 代碼如下:

xw.say.apply(xh);

而對于bind來說需要這樣:

復制代碼 代碼如下:

xw.say.bind(xh)();

如果直接寫xw.say.bind(xh)是不會有任何結果的,看到區別了嗎?call和apply都是對函數的直接調用,而bind方法返回的仍然是一個函數,因此后面還需要()來進行調用才可以。
那么call和apply有什么區別呢?我們把例子稍微改寫一下。

        var xw = {            name : "小王",            gender : "男",            age : 24,            say : function(school,grade) {                alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);                            }        }        var xh = {            name : "小紅",            gender : "女",            age : 18        }

可以看到say方法多了兩個參數,我們通過call/apply的參數進行傳參。
對于call來說是這樣的

復制代碼 代碼如下:

xw.say.call(xh,"實驗小學","六年級");      

而對于apply來說是這樣的

復制代碼 代碼如下:

xw.say.apply(xh,["實驗小學","六年級鄭州牛皮癬醫院"]);

看到區別了嗎,call后面的參數與say方法中是一一對應的,而apply的第二個參數是一個數組,數組中的元素是和say方法中一一對應的,這就是兩者最大的區別。
那么bind怎么傳參呢?它可以像call那樣傳參。

復制代碼 代碼如下:

xw.say.bind(xh,"實驗小學","六年級")();

但是由于bind返回的仍然是一個函數,所以我們還可以在調用的時候再進行傳參。

復制代碼 代碼如下:

xw.say.bind(xh)("實驗小學","六年級");

以上所述就是本文的全部內容了,希望大家能夠喜歡、

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩裸体免费视频| 久久视频免费在线播放| 国产精品久久久久久久久久小说| 亚洲天堂免费视频| 中文欧美日本在线资源| 成人h片在线播放免费网站| 伊人青青综合网站| 亚洲精品第一国产综合精品| 亚洲人成欧美中文字幕| 国产精品福利无圣光在线一区| 亚洲美女中文字幕| 亚洲综合小说区| 91高清免费在线观看| 日韩高清电影免费观看完整版| 77777少妇光屁股久久一区| 欧美天天综合色影久久精品| 欧美精品在线免费播放| 亚洲人成自拍网站| 国产欧美精品va在线观看| 欧美日韩中文字幕在线视频| 高跟丝袜欧美一区| 国产精品99久久久久久久久久久久| 久久av中文字幕| 国产精品男人爽免费视频1| 日韩av手机在线| 91精品国产91久久久久久| 国产欧美精品日韩| 色偷偷偷亚洲综合网另类| 国产欧美va欧美va香蕉在线| 欧美性猛交视频| 久久琪琪电影院| 亚洲精品xxxx| 91热精品视频| 日韩高清免费在线| 国产精品1234| 91在线网站视频| 亚洲午夜激情免费视频| 久久国产精品偷| 国产综合久久久久久| 国产成人综合av| 久久久噜噜噜久久久| 3344国产精品免费看| 久久久久久国产三级电影| 亚洲欧美国产精品专区久久| 另类图片亚洲另类| 日韩一中文字幕| 欧美在线视频在线播放完整版免费观看| 欧美成人精品激情在线观看| 美女黄色丝袜一区| 国产成人涩涩涩视频在线观看| 亚洲视频精品在线| 欧美色xxxx| 97在线观看视频国产| 日韩电视剧在线观看免费网站| 91午夜在线播放| 亚洲一级片在线看| 欧美特黄级在线| 亚洲另类xxxx| 日韩精品亚洲精品| 蜜臀久久99精品久久久久久宅男| 欧美最近摘花xxxx摘花| 精品动漫一区二区| 久久综合国产精品台湾中文娱乐网| 九九九热精品免费视频观看网站| 少妇高潮久久久久久潘金莲| 久久久成人的性感天堂| 丁香五六月婷婷久久激情| 日本韩国在线不卡| 日韩中文字幕久久| 国产精品主播视频| 久久亚洲国产精品成人av秋霞| 中文字幕精品一区久久久久| 亚洲自拍偷拍第一页| 国产亚洲精品高潮| 一区二区亚洲精品国产| 91在线免费网站| 欧美怡红院视频一区二区三区| 亚洲国产精品女人久久久| 日韩a**站在线观看| 国产精选久久久久久| 欧美多人乱p欧美4p久久| 久久国产精品久久精品| 欧美国产精品va在线观看| 亚州国产精品久久久| 亚洲无线码在线一区观看| 亚洲理论片在线观看| 久久久久久久久久久久av| 亚洲色图18p| 亚洲xxxx妇黄裸体| 亚洲欧美国产日韩中文字幕| 久久视频在线视频| 久久久999成人| 久久网福利资源网站| 日韩精品在线观看一区| 免费不卡欧美自拍视频| 久热精品视频在线观看| 美女精品久久久| 精品高清美女精品国产区| 91精品在线影院| 国产福利精品av综合导导航| 欧美老少配视频| 国产一区欧美二区三区| 亚洲欧美日韩另类| 欧美精品福利在线| 日韩国产欧美精品一区二区三区| 4438全国亚洲精品在线观看视频| 国内精品模特av私拍在线观看| 欧美一区二三区| 国产午夜精品一区理论片飘花| 日韩欧美国产激情| 亚洲国产日韩一区| 国产精品久久9| 国产精品男女猛烈高潮激情| 亚洲精品久久视频| 久久久精品免费视频| 亚洲国产精品视频在线观看| 色妞在线综合亚洲欧美| 日韩电影视频免费| 欧美日韩在线免费观看| 亚洲一区二区国产| 国产啪精品视频| 欧美视频不卡中文| 欧美性猛交xxxx偷拍洗澡| 国产91网红主播在线观看| 懂色av影视一区二区三区| 国产一区私人高清影院| 中文字幕av一区二区| 91精品久久久久久综合乱菊| 538国产精品视频一区二区| 91视频国产一区| 欧美成人在线免费视频| 美女少妇精品视频| 国产亚洲人成a一在线v站| 中文一区二区视频| 97在线免费视频| 国产精品一二三在线| 日韩视频在线免费观看| 岛国视频午夜一区免费在线观看| 日韩禁在线播放| 久久久97精品| 国产精品久久久久久久久久久久久| 亚洲男女性事视频| 91精品久久久久久综合乱菊| 日韩电影在线观看免费| 91国内产香蕉| 久久久久久久久久久成人| 亚洲网在线观看| 久久久久久久国产精品| 亚洲精品98久久久久久中文字幕| 欧美黄色片在线观看| 亚洲欧洲日产国码av系列天堂| 亚洲欧美制服另类日韩| 亲爱的老师9免费观看全集电视剧| 青草青草久热精品视频在线观看| 国产欧美va欧美va香蕉在| 国产不卡av在线| 久久久电影免费观看完整版| 精品福利在线观看| 人人澡人人澡人人看欧美| 亚洲黄色在线看| 亚洲欧美精品在线| 91精品免费看| 国产精品人成电影在线观看| 精品日韩美女的视频高清|