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

首頁 > 編程 > JavaScript > 正文

Js apply方法詳解

2019-11-19 17:32:59
字體:
來源:轉載
供稿:網友

我在一開始看到javascript的函數apply和call時,非常的模糊,看也看不懂,最近在網上看到一些文章對apply方法和call的一些示例,總算是看的有點眉目了,在這里我做如下筆記,希望和大家分享..  如有什么不對的或者說法不明確的地方希望讀者多多提一些意見,以便共同提高.. 

主要我是要解決一下幾個問題: 

1.apply和call的區別在哪里 

2.什么情況下用apply,什么情況下用call 

3.apply的其他巧妙用法(一般在什么情況下可以使用apply) 

我首先從網上查到關于apply和call的定義,然后用示例來解釋這兩個方法的意思和如何去用. 

apply:方法能劫持另外一個對象的方法,繼承另外一個對象的屬性. 

Function.apply(obj,args)方法能接收兩個參數 

obj:這個對象將代替Function類里this對象 

args:這個是數組,它將作為參數傳給Function(args-->arguments) 

call:和apply的意思一樣,只不過是參數列表不一樣. 

Function.call(obj,[param1[,param2[,…[,paramN]]]]) 

obj:這個對象將代替Function類里this對象 

params:這個是一個參數列表 

1.apply示例: 

<script type="text/javascript">  /*定義一個人類*/  function Person(name,age) {  this.name=name; this.age=age;  }  /*定義一個學生類*/  functionStudent(name,age,grade) {    Person.apply(this,arguments); this.grade=grade;  }  //創建一個學生類  var student=new Student("qian",21,"一年級");  //測試  alert("name:"+student.name+"/n"+"age:"+student.age+"/n"+"grade:"+student.grade);  //大家可以看到測試結果name:qian age:21 grade:一年級  //學生類里面我沒有給name和age屬性賦值啊,為什么又存在這兩個屬性的值呢,這個就是apply的神奇之處.  </script>

分析: Person.apply(this,arguments); 

this:在創建對象在這個時候代表的是student 

arguments:是一個數組,也就是[“qian”,”21”,”一年級”]; 

也就是通俗一點講就是:用student去執行Person這個類里面的內容,在Person這個類里面存在this.name等之類的語句,這樣就將屬性創建到了student對象里面 

2.call示例 

在Studen函數里面可以將apply中修改成如下: 

Person.call(this,name,age); 

這樣就ok了 

3.什么情況下用apply,什么情況下用call 

在給對象參數的情況下,如果參數的形式是數組的時候,比如apply示例里面傳遞了參數arguments,這個參數是數組類型,并且在調用Person的時候參數的列表是對應一致的(也就是Person和Student的參數列表前兩位是一致的) 就可以采用 apply , 如果我的Person的參數列表是這樣的(age,name),而Student的參數列表是(name,age,grade),這樣就可以用call來實現了,也就是直接指定參數列表對應值的位置(Person.call(this,age,name,grade)); 

4.apply的一些其他巧妙用法 

細心的人可能已經察覺到,在我調用apply方法的時候,第一個參數是對象(this), 第二個參數是一個數組集合,  

在調用Person的時候,他需要的不是一個數組,但是為什么他給我一個數組我仍然可以將數組解析為一個一個的參數, 

這個就是apply的一個巧妙的用處,可以將一個數組默認的轉換為一個參數列表([param1,param2,param3] 轉換為 param1,param2,param3) 這個如果讓我們用程序來實現將數組的每一個項,來裝換為參數的列表,可能都得費一會功夫,借助apply的這點特性,所以就有了以下高效率的方法: 

a)Math.max 可以實現得到數組中最大的一項 

因為Math.max 參數里面不支持Math.max([param1,param2]) 也就是數組 

但是它支持Math.max(param1,param2,param3…),所以可以根據剛才apply的那個特點來解決 var max=Math.max.apply(null,array),這樣輕易的可以得到一個數組中最大的一項 

(apply會將一個數組裝換為一個參數接一個參數的傳遞給方法) 

這塊在調用的時候第一個參數給了一個null,這個是因為沒有對象去調用這個方法,我只需要用這個方法幫我運算,得到返回的結果就行,.所以直接傳遞了一個null過去 

b)Math.min  可以實現得到數組中最小的一項 

同樣和 max是一個思想 var min=Math.min.apply(null,array); 

c)Array.prototype.push 可以實現兩個數組合并 

同樣push方法沒有提供push一個數組,但是它提供了push(param1,param,…paramN) 所以同樣也可以通過apply來裝換一下這個數組,即: 

vararr1=new Array("1","2","3"); vararr2=new Array("4","5","6"); Array.prototype.push.apply(arr1,arr2); 

也可以這樣理解,arr1調用了push方法,參數是通過apply將數組裝換為參數列表的集合. 

通常在什么情況下,可以使用apply類似Math.min等之類的特殊用法: 

一般在目標函數只需要n個參數列表,而不接收一個數組的形式([param1[,param2[,…[,paramN]]]]),可以通過apply的方式巧妙地解決這個問題! 

5.總結: 

一開始我對apply 非常的不懂,最后多看了幾遍,自己多敲了幾遍代碼,才明白了中間的道理,所以,不管做什么事情,只要自己肯動腦子,肯動手敲代碼,這樣一個技術就會掌握…    

還有比如第四部分得內容,巧妙的解決了實實在在存在的問題,這個肯定不是一個初學者能想到的解決方案(這個也不是我自己想的),沒有對編程有一定認識的不會想到這個的,還是一句話,多積累,多學習,提升自己的能力和對編程思想的理解能力才是最關鍵!

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網! 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美xxxx交| 国产精品91久久久久久| 26uuu另类亚洲欧美日本一| 国产视频丨精品|在线观看| 久久伊人精品一区二区三区| 91久久久亚洲精品| 欧美贵妇videos办公室| 国产精品一区二区三区免费视频| 亚洲精品美女久久| 欧美中文字幕在线视频| 久久久久中文字幕2018| 亚洲精品国产拍免费91在线| 成人国产精品日本在线| 午夜精品蜜臀一区二区三区免费| 奇门遁甲1982国语版免费观看高清| 高清欧美电影在线| 久久五月天色综合| 亚洲一区二区久久久久久| 91精品久久久久久久久久久久久久| 久久天天躁狠狠躁夜夜躁2014| 欧美大片va欧美在线播放| 国产+成+人+亚洲欧洲| 日韩欧美国产网站| 久久精品中文字幕电影| 欧美主播福利视频| 中文字幕在线看视频国产欧美| 国内精品视频在线| 92版电视剧仙鹤神针在线观看| 久久综合88中文色鬼| 91精品久久久久久久久青青| 国产综合色香蕉精品| 9.1国产丝袜在线观看| 欧美在线视频观看| 亚洲自拍偷拍色片视频| 最新国产成人av网站网址麻豆| 日韩欧美在线一区| 色妞色视频一区二区三区四区| 久久久久久久999精品视频| 欧美一区第一页| 国产精品对白刺激| 久久精品99久久久久久久久| 在线国产精品播放| 黄色一区二区三区| 国产精品久久久久99| 91av免费观看91av精品在线| 欧美野外wwwxxx| 久久99久久99精品免观看粉嫩| 亚洲国产高清福利视频| 国产精品久久久久久久一区探花| 在线观看日韩欧美| 亚洲午夜精品久久久久久性色| 久久久久久九九九| 精品视频—区二区三区免费| 北条麻妃一区二区在线观看| 欧美性受xxxx白人性爽| 欧美成人久久久| 亚洲人成在线播放| 中文字幕精品视频| 在线国产精品播放| 亚洲最新中文字幕| 午夜精品久久久久久久男人的天堂| 国产精品久久久久91| 欧美日韩国产在线| 欧美日韩在线另类| 亚洲国产另类 国产精品国产免费| 欧美精品情趣视频| 91精品国产91| 亚洲精品中文字幕av| 久久久久久尹人网香蕉| 欧美日韩aaaa| 在线观看日韩专区| 91po在线观看91精品国产性色| 国产精品pans私拍| 中文精品99久久国产香蕉| 国产精品视频资源| 国产午夜精品美女视频明星a级| 欧美男插女视频| 国产精品7m视频| 亚洲一区二区三| 91精品久久久久久久久久入口| 奇米一区二区三区四区久久| 欧美日韩999| 欧美激情一区二区久久久| 最近2019年日本中文免费字幕| 久久久久久噜噜噜久久久精品| 国产偷国产偷亚洲清高网站| 成人免费网站在线看| 成人免费观看a| 亚洲欧美另类在线观看| 国产精品激情av在线播放| 国产成人a亚洲精品| 欧美精品免费在线| 日韩av在线一区| 欧美日韩xxxxx| 在线午夜精品自拍| 精品亚洲男同gayvideo网站| 国产成人精品午夜| 精品视频偷偷看在线观看| 中文国产成人精品久久一| 日韩中文字幕国产精品| 国产精品扒开腿做爽爽爽男男| 国产亚洲精品久久久久久牛牛| 色婷婷av一区二区三区久久| 亚洲精品国精品久久99热| 欧美成人午夜激情视频| 日韩av毛片网| 欧美日韩亚洲一区二区| 亚洲а∨天堂久久精品9966| 午夜精品久久久久久久99黑人| 97**国产露脸精品国产| 亚洲午夜女主播在线直播| 91精品国产综合久久香蕉| 欧美性猛交xxxxx免费看| 国产精品9999| 在线日韩中文字幕| 日韩av不卡电影| 亚洲激情视频在线观看| 国产亚洲一区二区精品| 久久成人精品视频| 国产999精品视频| 国内精品视频久久| 欧美黑人巨大xxx极品| 日韩av电影在线网| 国产在线视频欧美| 国产97色在线|日韩| 97精品一区二区三区| 亚洲男人天堂久| 亚洲国产欧美一区二区丝袜黑人| 中文字幕日韩欧美在线| 91精品国产91久久久久久| 日韩在线激情视频| 日本中文字幕成人| 亚洲精品福利在线| 精品女同一区二区三区在线播放| 欧美性猛交xxxx富婆| 亚洲国产精品美女| 国产亚洲人成网站在线观看| 国产精品久久久久久久久免费| 在线日韩欧美视频| 国产精品女主播视频| 欧美日韩亚洲精品一区二区三区| 欧美激情久久久久| 亚洲人成欧美中文字幕| 久久久久久国产精品| 久久视频中文字幕| 91视频免费在线| 在线视频国产日韩| 日韩av在线网页| 国产在线观看精品| 最近2019中文字幕第三页视频| 亚洲三级av在线| 久久亚洲欧美日韩精品专区| 日韩欧美在线网址| 国产精品海角社区在线观看| 欧美重口另类videos人妖| 久久久久国产一区二区三区| 日韩精品小视频| 欧美激情在线播放| 川上优av一区二区线观看| 欧美激情一级二级| 欧美中文在线观看国产| 欧美日韩精品在线视频| 亚洲娇小xxxx欧美娇小| 国外成人在线直播|