精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解JavaScript中的this

開發 前端
JavaScript中的this總是讓人迷惑,應該是js眾所周知的坑之一。個人也覺得js中的this不是一個好的設計,由于this晚綁定的特性,它可以是全局對象,當前對象,或者…有人甚至因為坑大而不用this。

JavaScript中的this總是讓人迷惑,應該是js眾所周知的坑之一。個人也覺得js中的this不是一個好的設計,由于this晚綁定的特性,它可以是全局對象,當前對象,或者…有人甚至因為坑大而不用this。

其實如果完全掌握了this的工作原理,自然就不會走進這些坑。來看下以下這些情況中的this分別會指向什么:

1.全局代碼中的this

  1. alert(this)//window 

全局范圍內的this將會指向全局對象,在瀏覽器中即使window。

2.作為單純的函數調用

  1. function fooCoder(x) {  
  2.     this.x = x;  
  3. }  
  4. fooCoder(2);  
  5. alert(x);// 全局變量x值為2 

這里this指向了全局對象,即window。在嚴格模式中,則是undefined。

3.作為對象的方法調用

  1. var name = "clever coder";  
  2. var person = {  
  3.     name : "foocoder",  
  4.     hello : function(sth){  
  5.         console.log(this.name + " says " + sth);  
  6.     }  
  7. }  
  8. person.hello("hello world"); 

輸出 foocoder says hello world。this指向person對象,即當前對象。

4.作為構造函數

  1. new FooCoder();  

函數內部的this指向新創建的對象。

5.內部函數

  1. var name = "clever coder";  
  2. var person = {  
  3.     name : "foocoder",  
  4.     hello : function(sth){  
  5.         var sayhello = function(sth) {  
  6.             console.log(this.name + " says " + sth);  
  7.         };  
  8.         sayhello(sth);  
  9.     }  
  10. }  
  11. person.hello("hello world");//clever coder says hello world  

在內部函數中,this沒有按預想的綁定到外層函數對象上,而是綁定到了全局對象。這里普遍被認為是JavaScript語言的設計錯誤,因為沒有人想讓內部函數中的this指向全局對象。一般的處理方式是將this作為變量保存下來,一般約定為that或者self:

  1. var name = "clever coder";  
  2. var person = {  
  3.     name : "foocoder",  
  4.     hello : function(sth){  
  5.         var that = this;  
  6.         var sayhello = function(sth) {  
  7.             console.log(that.name + " says " + sth);  
  8.         };  
  9.         sayhello(sth);  
  10.     }  
  11. }  
  12. person.hello("hello world");//foocoder says hello world 

6.使用call和apply設置this

  1. person.hello.call(person, "world"); 

apply和call類似,只是后面的參數是通過一個數組傳入,而不是分開傳入。兩者的方法定義:

  1. call( thisArg [,arg1,arg2,… ] );  // 參數列表,arg1,arg2,...  
  2. apply(thisArg [,argArray] );     // 參數數組,argArray 

兩者都是將某個函數綁定到某個具體對象上使用,自然此時的this會被顯式的設置為第一個參數。

簡單地總結

簡單地總結以上幾點,可以發現,其實只有第六點是讓人疑惑的。

其實就可以總結為以下幾點:

1.當函數作為對象的方法調用時,this指向該對象。

2.當函數作為淡出函數調用時,this指向全局對象(嚴格模式時,為undefined)

3.構造函數中的this指向新創建的對象

4.嵌套函數中的this不會繼承上層函數的this,如果需要,可以用一個變量保存上層函數的this。

再總結的簡單點,如果在函數中使用了this,只有在該函數直接被某對象調用時,該this才指向該對象。

  1. obj.foocoder();  
  2. foocoder.call(obj, ...);  
  3. foocoder.apply(obj, …);  

更進一步

我們可能經常會寫這樣的代碼:

  1. $("#some-ele").click = obj.handler;  

如果在handler中用了this,this會綁定在obj上么?顯然不是,賦值以后,函數是在回調中執行的,this會綁定到$(“#some-div”)元素上。這就需要理解函數的執行環境。本文不打算長篇贅述函數的執行環境,可以參考《javascript高級程序設計》中對執行環境和作用域鏈的相關介紹。這里要指出的時,理解js函數的執行環境,會更好地理解this。

那我們如何能解決回調函數綁定的問題?ES5中引入了一個新的方法,bind():

  1. fun.bind(thisArg[, arg1[, arg2[, ...]]])  
  2.  
  3. thisArg  
  4. 當綁定函數被調用時,該參數會作為原函數運行時的this指向.當使用new 操作符調用綁定函數時,該參數無效.  
  5. arg1, arg2, ...  
  6. 當綁定函數被調用時,這些參數加上綁定函數本身的參數會按照順序作為原函數運行時的參數. 

該方法創建一個新函數,稱為綁定函數,綁定函數會以創建它時傳入bind方法的第一個參數作為this,傳入bind方法的第二個以及以后的參數加上綁定函數運行時本身的參數按照順序作為原函數的參數來調用原函數.

顯然bind方法可以很好地解決上述問題。

  1. $("#some-ele").click(person.hello.bind(person));  
  2. //相應元素被點擊時,輸出foocoder says hello world  

其實該方法也很容易模擬,我們看下Prototype.js中bind方法的源碼:

  1. Function.prototype.bind = function(){  
  2.   var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift();  
  3.   return function(){  
  4.     return fn.apply(object,  
  5.       args.concat(Array.prototype.slice.call(arguments)));  
  6.   };  
  7. };  

明白了么?

相信看完全文以后,this不再是坑~

原文鏈接:http://foocoder.com/blog/xiang-jie-javascriptzhong-de-this.html/

責任編輯:林師授 來源: foocoder
相關推薦

2017-03-20 14:45:42

JavaScript詳解

2009-09-21 16:59:29

Array擴展

2016-10-11 20:33:17

JavaScriptThisWeb

2016-12-27 10:19:42

JavaScriptindexOf

2010-09-08 15:13:09

Node節點Node屬性

2009-10-26 15:07:12

checkbox樹

2016-08-12 11:04:17

JavaScript物聯網應用

2024-04-26 08:27:15

JavaScriptCSSHTML元素

2020-11-18 09:06:02

JavaScript開發技術

2009-11-06 13:28:19

Javascript框

2010-10-09 09:56:51

JavaScriptObject對象

2015-12-24 10:05:39

JavaScripttypeofinstanceof

2012-02-14 09:45:02

JavaScript

2023-06-28 08:34:02

Bind()函數JavaScript

2009-10-20 14:58:15

Javascript事

2014-12-12 10:13:12

JavaScript

2016-09-07 20:43:36

Javascript異步編程

2009-06-10 22:07:59

JavaScriptdocument對象window對象

2010-06-03 08:55:43

LINQ

2014-01-03 09:13:39

JavaScriptthis
點贊
收藏

51CTO技術棧公眾號

国语对白做受xxxxx在线中国| 91在线免费看片| 日本少妇高潮喷水xxxxxxx| 99久久婷婷国产综合精品首页 | 日本一区二区三区在线视频| 国语对白做受69按摩| 99精品综合| 亚洲精美色品网站| 亚洲综合婷婷久久| 538在线精品| 国产欧美一区二区三区在线老狼 | 一道本无吗一区| 国产精品激情电影| 在线电影av不卡网址| 性色av浪潮av| 2019年精品视频自拍| 亚洲一区二区三区自拍| 日韩久久久久久久| 性一交一乱一伧老太| 日韩黄色小视频| 久久久久中文字幕2018| 99精品欧美一区二区| 97一区二区国产好的精华液| 欧美视频在线观看一区| 久久久久久免费看| 日本在线天堂| 久久亚洲私人国产精品va媚药| 国产精品第一区| 国产成人亚洲欧洲在线| 999国产精品999久久久久久| 亚洲精品日韩在线| 国产精品一区二区在线免费观看| 成人在线高清| 精品免费在线视频| 4444亚洲人成无码网在线观看| 91在线看黄| 国产亚洲午夜高清国产拍精品| 国产精品久久7| 国产特级黄色片| 久久狠狠亚洲综合| 国产精品久久久久久久9999| 国产成人免费观看视频| 国产在线日韩| 久久久久久久999| 中文字幕人妻一区二| 日韩在线欧美| 日日狠狠久久偷偷四色综合免费| 3d动漫精品啪啪一区二区下载 | 日韩av在线天堂| 欧美不卡在线| 欧美成人午夜免费视在线看片| 欧美一区二区三区观看| 成人激情电影在线| 亚洲新中文字幕| 国产美女免费无遮挡| 日韩欧美影院| 亚洲美女性生活视频| 亚洲观看黄色网| 国产精品乱战久久久| 精品国产三级电影在线观看| 美女日批在线观看| 亚洲成人五区| 欧美成人a视频| 岛国精品一区二区三区| 91精品国产乱码久久久竹菊| 日韩精品一区二| 日本精品一二三区| 日本欧美高清| 国产亚洲欧美视频| 美国一级黄色录像| 欧美高清视频手机在在线| 中文字幕在线亚洲| 在线免费观看亚洲视频| 中文精品久久| 国模私拍视频一区| 国产手机在线视频| 日韩av一级片| 国产乱人伦真实精品视频| 亚洲字幕av一区二区三区四区| 久久国产成人午夜av影院| 亚洲a在线观看| 人妻中文字幕一区| av电影在线观看完整版一区二区| 蜜桃麻豆www久久国产精品| 色视频在线观看| 亚洲国产精品传媒在线观看| 这里只有精品66| 国产桃色电影在线播放| 色综合天天综合给合国产| www欧美激情| 亚洲天堂av资源在线观看| 亚洲国产毛片完整版| 欧美无人区码suv| 日韩在线综合| 午夜伦理精品一区| 伊人网中文字幕| 国产精品18久久久久久久网站| 精品无人区一区二区三区竹菊 | 玖玖玖免费嫩草在线影院一区| 亚洲深夜福利网站| 欧美黑人性猛交xxx| 一区二区国产精品| 国产在线观看精品一区二区三区| 少妇无码一区二区三区| 国产精品美日韩| 男人天堂手机在线视频| 欧美色片在线观看| 亚洲电影免费观看| 亚洲精品电影院| 亚洲欧美久久| 99在线观看视频| 亚洲乱亚洲乱妇| 精品高清美女精品国产区| 日本人视频jizz页码69| 国产精品xxx在线观看| 色爱av美腿丝袜综合粉嫩av| 日韩少妇高潮抽搐| 激情都市一区二区| 日韩精品久久久毛片一区二区| 女人天堂av在线播放| 欧美视频中文一区二区三区在线观看 | 中文字幕五月天| 久久精品人人| 国产视频精品网| 在线观看a级片| 欧美日韩欧美一区二区| 国产三级视频网站| 在线国产精品一区| 99久re热视频这里只有精品6| av大片在线播放| 91久久免费观看| 天堂久久久久久| 黄色成人精品网站| 91香蕉亚洲精品| 免费在线观看黄色网| 欧美专区亚洲专区| 日韩人妻无码精品综合区| 一本色道久久综合一区| 国产精品免费在线 | 国产精品探花在线观看| 26uuu久久噜噜噜噜| 天天干天天色天天| 亚洲福利一区二区三区| 男人女人拔萝卜视频| 91精品国产自产在线观看永久∴| 国产精品一区二区3区| 成年人视频网站在线| 色老头久久综合| 女人又爽又黄免费女仆| 销魂美女一区二区三区视频在线| 狠狠干一区二区| 狼人综合视频| 亚洲美女在线看| 综合网在线观看| 国产亚洲1区2区3区| 国产一区二区视频免费在线观看| 视频国产一区| 国产精品视频不卡| 久久精品视频免费看| 欧美三级韩国三级日本一级| 性生生活大片免费看视频| 久久亚洲精品中文字幕蜜潮电影| 国产精品欧美日韩一区二区| 国产视频网站在线| 欧美日韩精品高清| 日本女人性生活视频| 久久99热狠狠色一区二区| 性欧美18一19内谢| 日韩在线激情| 久久亚洲国产精品成人av秋霞| 91亚洲欧美激情| 亚洲视频香蕉人妖| 亚洲精品一二三四| 日韩视频一区| 欧美日韩电影一区二区三区| 写真福利精品福利在线观看| 国产亚洲精品久久久久久牛牛| 国产亚洲欧美日韩高清| 最近日韩中文字幕| 自拍一级黄色片| 亚洲国产二区| 麻豆91av| 国产亚洲观看| 国内精品伊人久久| 免费在线视频一级不卡| 欧美日韩中文另类| 婷婷激情四射网| 北条麻妃一区二区三区| 热99这里只有精品| 免费视频亚洲| 国产欧美在线看| 国产理论电影在线| 国产网站欧美日韩免费精品在线观看| 日本成人一级片| 亚洲精品久久久久久国产精华液| 一本色道久久hezyo无码| 日韩av电影免费观看高清完整版| 一本一本久久a久久精品综合妖精| 国产一区二区高清在线| 97色在线播放视频| 黄色片在线免费观看| 欧美一区三区四区| 久久亚洲天堂网| 国产精品高潮呻吟久久| 四虎永久免费观看| 久久精品免费观看| 欧美中文字幕在线观看视频| 粉嫩久久久久久久极品| 国产精品久久av| 欧美aaaaaaa| 中文欧美在线视频| 丰满少妇被猛烈进入| 欧洲精品中文字幕| 久久一级黄色片| 亚洲视频一区在线| 波多野结衣一本| 国产69精品久久777的优势| 99视频免费播放| 国产日本精品| 9191国产视频| 色喇叭免费久久综合| 久久riav| 久久久久久亚洲精品美女| 欧美一级bbbbb性bbbb喷潮片| 国产黄a三级三级三级av在线看| 日韩精品高清视频| 99精品视频免费看| 欧美人与z0zoxxxx视频| 国产在线观看黄色| 亚洲成人精品一区二区| 国产美女福利视频| 国产精品久久福利| 白白色免费视频| av电影天堂一区二区在线观看| 中文字幕一二三| 激情欧美一区二区| 亚洲激情在线观看视频| 欧美资源在线| 日韩精品―中文字幕| 亚洲国产一区二区三区a毛片| 国产高清精品软男同| 日韩精品免费一区二区三区| 久久国产手机看片| 91欧美极品| 97se国产在线视频| 欧美区一区二区| 91久久久久久| 日韩av综合| 91在线视频一区| 四虎影视精品永久在线观看| 国产精品久久久久久久久久ktv| 国产乱码午夜在线视频| 欧美人与性动交| 二区在线播放| 久久天天躁狠狠躁夜夜躁2014| 欧美三级黄网| 久久精品一本久久99精品| 69视频在线观看| 中文字幕日本欧美| 超碰人人在线| 欧美夫妻性生活视频| 99久久精品免费观看国产| 超碰91人人草人人干| 日韩特级毛片| 久久频这里精品99香蕉| av资源一区| 97成人在线视频| 麻豆精品蜜桃| 国产三级精品网站| 国产精品3区| 96国产粉嫩美女| 久久久久久毛片免费看 | julia中文字幕一区二区99在线| 不卡视频一区| 国产精品美女在线观看直播| 国产亚洲第一区| 欧美色爱综合| 裸体裸乳免费看| 国产精品www.| 日韩中文字幕组| 蜜臀a∨国产成人精品| 久热精品在线播放| 国产精品一级二级三级| 亚洲久久久久久| 国产亚洲欧美日韩日本| 99成人在线观看| 亚洲综合一区在线| 91午夜精品亚洲一区二区三区| 欧美视频一区在线| va视频在线观看| 精品视频在线播放| 国产二区三区在线| 96精品视频在线| 99久久精品一区二区成人| 国产欧美精品在线播放| 欧洲亚洲视频| 亚洲午夜精品一区二区| 亚洲性感美女99在线| 在线观看国产福利| 成人午夜电影小说| 国产123在线| 亚洲成人激情av| 国产精品区在线观看| 日韩精品中文在线观看| 麻豆视频在线免费观看| 欧美激情一区二区三区久久久 | 亚洲大片免费看| 这里只有精品999| 日韩av在线最新| 日本高清在线观看wwwww色| 欧美激情一区二区三区成人 | 天天干天天色天天干| 99久久国产免费看| 日本女人性生活视频| 欧美日韩裸体免费视频| 国产高清在线观看视频| 亚洲全黄一级网站| 里番在线播放| 国产在线精品成人一区二区三区| 国产永久精品大片wwwapp| 欧美黄网在线观看| 美女高潮久久久| 视频区 图片区 小说区| 日本一区二区三区高清不卡| 日韩av男人天堂| 日韩一区二区三区四区 | 欧美成人免费全部| 日韩三区免费| 久久久久久久久一区| 最新国产乱人伦偷精品免费网站| 中文字幕线观看| 欧美国产综合一区二区| 久久夜色精品国产噜噜亚洲av| 欧美成人艳星乳罩| 黄色网页在线免费看| 国产精品高潮呻吟久久av野狼 | 亚洲精品之草原avav久久| 色呦呦在线观看视频| 成人精品一区二区三区| 亚洲精品推荐| 99999精品视频| 波多野结衣视频一区| 久草成人在线视频| 欧美白人最猛性xxxxx69交| 黄色小网站在线观看| 国产精品久久久久久久app| 精品网站aaa| 日日摸日日碰夜夜爽无码| 国产成人综合网站| 黄色一级大片在线免费观看| 欧美一区二区不卡视频| 免费观看在线午夜影视| 国产美女精彩久久| 91欧美日韩| 婷婷免费在线观看| 国产精品视频你懂的| www.久久精品视频| 中文字幕精品一区二区精品| av有声小说一区二区三区| 免费看成人午夜电影| 男男成人高潮片免费网站| 奇米网一区二区| 69久久夜色精品国产69蝌蚪网| 色黄网站在线观看| 91手机在线播放| 精品99视频| 国产美女视频免费观看下载软件| 午夜伊人狠狠久久| 凸凹人妻人人澡人人添| 国色天香2019中文字幕在线观看| 无码日韩精品一区二区免费| 欧美aⅴ在线观看| 亚洲国产精品精华液ab| 亚洲av无码一区二区三区性色| 欧美激情视频网站| 色老板在线视频一区二区| 黄色aaa级片| 亚洲天堂精品在线观看| www精品国产| 欧美在线一区二区视频| 欧美一区二区性| 亚洲一区二区中文字幕在线观看| 亚洲精品国产一区二区三区四区在线| 99在线精品视频免费观看软件| 欧美激情一级二级| 精品一区欧美| 三级黄色片播放| 午夜成人免费电影| 超碰国产在线观看| 国产精品v欧美精品v日韩| 国产精品亚洲欧美| 日本欧美一区二区三区不卡视频| 日韩欧美国产1| 免费成人动漫| 可以免费看的黄色网址| 26uuu久久天堂性欧美| 国产麻豆免费观看| 26uuu亚洲国产精品| 牛牛国产精品| 中文字幕人妻一区二区|