精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

天天操天天射天天| 老女人性淫交视频| 国产成人77亚洲精品www| 国产精品每日更新| 91视频99| 亚洲精品中文字幕乱码三区91| 国产成人精品一区二区免费看京 | 亚洲国产成人久久| 日韩中文字幕免费在线| 美女羞羞视频在线观看| 国产成人精品影院| 国产精品va在线播放| 老湿机69福利| 国产在视频线精品视频www666| 欧美日韩国产高清一区二区三区| 97在线国产视频| 999在线视频| 99久免费精品视频在线观看| 国产精品入口日韩视频大尺度| 久久精品视频6| 色综合蜜月久久综合网| 亚洲精品动漫100p| 亚洲三级在线观看视频| 自拍一区在线观看| 一区二区三区四区蜜桃| 天天久久人人| 四虎影院在线域名免费观看| 国产99精品在线观看| 国产精品午夜一区二区欲梦| 日韩女优在线观看| 91精品高清| 中文字幕在线观看亚洲| 免费黄色在线视频| 精品国产导航| 日韩欧美一区二区免费| 在线观看av网页| 电影一区二区三| 亚欧色一区w666天堂| 日本中文字幕一级片| 国产视频三级在线观看播放| 99视频精品在线| 国产精品久久国产三级国电话系列| 波多野结衣家庭主妇| 国产欧美精品| 98视频在线噜噜噜国产| 国产主播在线播放| 韩日欧美一区| 久久久久国产一区二区三区| 永久看片925tv| 午夜免费一区| 久久精品一区中文字幕| 激情无码人妻又粗又大| 精品视频免费在线观看| 亚洲欧美精品一区| 久久久久久久久久久久| 一区三区在线欧| 亚洲欧美日韩中文视频| 在线不卡av电影| 国产欧美日韩视频在线| 亚洲欧美综合v| 少妇无套高潮一二三区| 国产成人精品免费视| 亚洲人成网站免费播放| 成人国产精品久久久网站| 欧美男gay| 国产亚洲欧美aaaa| 免费看的黄色录像| 欧美wwwww| 欧美美女18p| 99精品视频99| 另类图片国产| 成人国产精品一区| 国产成人精品亚洲精品色欲| 国产福利一区二区三区| 国产精品成人观看视频免费| 少妇高潮一区二区三区69| 99r国产精品| 日韩欧美一区二区三区四区 | 国产色综合久久| 色狠狠久久av五月综合|| 337p日本欧洲亚洲大胆鲁鲁| 亚洲人成7777| 国产精品专区在线| 黑人精品一区| 欧美一区二区三区免费在线看| 国产亚洲精品成人a| 久久99青青| 色噜噜狠狠色综合网图区| 成熟的女同志hd| 夜夜嗨网站十八久久 | 亚洲图片小说区| 亚洲成人免费在线视频| 熟女俱乐部一区二区视频在线| 日韩中文欧美| 国模视频一区二区| 中文字幕免费视频观看| 国产精品一区二区你懂的| 久久久久久国产精品一区| 成人一区二区不卡免费| 一区二区三区在线免费观看| 激情视频综合网| 日韩一区二区三区精品| 亚洲日韩中文字幕| 久久免费视频播放| 亚洲美女av黄| 人人干视频在线| 中文字幕乱码在线播放| 欧美人成免费网站| 欧产日产国产精品98| 欧美一区电影| 国模吧一区二区| 中文字幕一区二区人妻| 国产91丝袜在线观看| 亚洲韩国在线| 欧美少妇网站| 日韩一级黄色片| 免费一级黄色录像| 91久久夜色精品国产九色| 成人日韩在线电影| 韩国三级在线观看久| 亚洲午夜激情av| www.色就是色.com| 久久综合欧美| 97精品一区二区三区| 97视频免费在线| 久久久99免费| 欧美,日韩,国产在线| 精品国模一区二区三区欧美| 国产一区二区三区在线视频 | www.涩涩涩| 欧美尿孔扩张虐视频| 欧美日韩高清在线观看| 7777久久亚洲中文字幕| 国产肉丝袜一区二区| a在线视频观看| 欧美1区2区3| 麻豆国产精品va在线观看不卡| 波多野结衣一本一道| 97精品国产露脸对白| 国产欧美日韩小视频| 日韩高清一区| 美女精品久久久| 国产孕妇孕交大片孕| 中文字幕一区二区三| 小泽玛利亚视频在线观看| 国产精品中文字幕亚洲欧美| 热草久综合在线| 你懂的免费在线观看| 欧美性猛交xxxx黑人猛交| 亚洲国产欧美视频| 国产亚洲精品v| 久久资源av| 亚洲伊人av| 亚洲欧美三级伦理| 日韩电影在线观看一区二区| 久久综合九色综合欧美亚洲| 免费av手机在线观看| 青青草原在线亚洲| 欧美在线视频播放| 国产视频精选在线| 欧美日韩五月天| 免费在线观看a级片| 国产精品一区二区久久精品爱涩| 日本丰满少妇黄大片在线观看| 日本在线一区二区三区| 欧美极品美女电影一区| 手机在线观看毛片| 日韩欧美一区二区三区| 水蜜桃av无码| 久久精品网址| 亚洲成色www久久网站| 亚洲欧美综合久久久久久v动漫| 久久精品国亚洲| 亚洲国产999| 欧美日韩激情视频8区| 五月天综合视频| 久久99深爱久久99精品| 久久人妻无码一区二区| 欧美黄色网视频| 国产精品第100页| 黄色网在线播放| 欧美精品一区二区三区在线| 在线精品免费视| 国产精品麻豆视频| gogo亚洲国模私拍人体| 99热这里只有成人精品国产| 日韩精品av一区二区三区| 成人av在线播放| 午夜精品福利电影| 成黄免费在线| 欧美不卡视频一区| 成人午夜淫片100集| 国产精品短视频| 丝袜熟女一区二区三区| 美女精品一区二区| 国产白丝袜美女久久久久| 日韩成人影院| 国产伦精品一区二区三区视频黑人| 日韩免费福利视频| 久久资源免费视频| 色资源在线观看| 日韩亚洲欧美一区| 天天干,天天干| 亚洲制服丝袜av| 欧美激情久久久久久久| 成人福利在线看| 国产乱码一区二区三区四区| 亚洲视频二区| 91成人综合网| 欧美韩日一区| 欧美日韩精品中文字幕一区二区| 榴莲视频成人app| 国产激情久久久久| 成人bbav| 欧美第一黄色网| 亚洲1卡2卡3卡4卡乱码精品| 日韩精品视频在线免费观看| 亚洲av少妇一区二区在线观看| 91久久免费观看| 成人免费区一区二区三区| 亚洲欧美一区二区三区国产精品 | 婷婷色在线视频| 欧美一级免费大片| 中文字字幕在线中文乱码| 欧美日韩国产色| 免费一级全黄少妇性色生活片| 日本一区二区在线不卡| 久久久久久久人妻无码中文字幕爆| 久久99热这里只有精品| 国产成人黄色网址| 丝袜亚洲精品中文字幕一区| 欧美丰满熟妇bbbbbb百度| 欧美激情日韩| 欧美 国产 精品| 国产精品久久久久久久| 亚洲v国产v| 成人激情在线| 午夜精品一区二区三区在线观看 | 成人性做爰片免费视频| 日韩美女一区二区三区在线观看| 欧美不卡1区2区3区| 久久悠悠精品综合网| av在线不卡观看| 欧美激情精品| 51成人做爰www免费看网站| 亚洲综合视频| 18成人免费观看网站下载| 亚洲成人精品综合在线| 成人a在线视频| 亚洲精品无播放器在线播放| 成人免费xxxxx在线观看| 四虎影视成人精品国库在线观看| 国产精自产拍久久久久久| 国产成人精品一区二区三区在线 | 免费看国产曰批40分钟| 亚洲国产日本| 116极品美女午夜一级| 亚洲影音先锋| 免费激情视频在线观看| 蜜乳av一区二区三区| 五月花丁香婷婷| 国产精品一区二区91| 中文字幕99页| www一区二区| 永久免费毛片在线观看| 国产精品久久久久久久岛一牛影视| 色欲一区二区三区精品a片| 亚洲女爱视频在线| 国产精品a成v人在线播放| 欧美性生活大片免费观看网址| 久久永久免费视频| 欧美精品九九99久久| 性做久久久久久久| 日韩美女av在线| 69久久久久| 久久99久久久久久久噜噜| 成入视频在线观看| 国产精品69久久| 精品91福利视频| 久久久久se| 99久久夜色精品国产亚洲1000部| 欧美一级中文字幕| 天堂久久久久va久久久久| 日韩成人av免费| 91亚洲永久精品| 后入内射无码人妻一区| 亚洲综合一区在线| chinese国产精品| 91精品久久久久久蜜臀| 婷婷在线免费视频| 最近2019中文字幕第三页视频| 国产精品一区二区三区视频网站| 久久久女人电视剧免费播放下载| 国产精品极品美女在线观看| 91九色对白| 国产亚洲一区| 日韩成人三级视频| 日韩va欧美va亚洲va久久| 天天色天天干天天色| 久久午夜国产精品| 青青操视频在线播放| 91国偷自产一区二区开放时间| 精品国产无码一区二区三区| 亚洲小视频在线观看| 国产羞羞视频在线播放| 国产精品免费网站| 欧美男人操女人视频| a级网站在线观看| 爽好多水快深点欧美视频| 国产又黄又嫩又滑又白| 欧美激情资源网| 91九色丨porny丨肉丝| 91精品国产91久久久久久一区二区 | 欧美一区二区三区在线电影| 你懂的在线观看视频网站| 欧美黑人巨大精品一区二区| 久久亚洲人体| 日本免费一区二区三区| 亚洲黄页一区| 少妇丰满尤物大尺度写真| 中文字幕国产一区| 五月婷婷视频在线| 精品99999| 怡红院在线观看| 91免费版网站入口| 久久视频在线| 超碰网在线观看| 99久久精品国产导航| 精品肉丝脚一区二区三区| 欧美肥胖老妇做爰| 在线视频自拍| 国产精自产拍久久久久久| 精品免费一区二区| 免费裸体美女网站| 91麻豆国产精品久久| 国产精品成人久久| 亚洲成人在线网| 波多野结衣中文在线| 国产精品视频入口| 亚洲午夜视频| 无码人妻久久一区二区三区蜜桃| 亚洲三级在线看| 国产乱色精品成人免费视频| 日韩中文在线视频| 亚洲综合视频| 992tv快乐视频| 国产99久久久国产精品| 久久久久久久久久综合| 日韩欧美国产三级电影视频| 超碰在线caoporn| 亚洲一区二区免费在线| 中文字幕一区二区三区在线视频| 亚洲第一色av| 亚洲影视资源网| 欧美熟女一区二区| 91爱视频在线| 国产成人精品免费视| 天天插天天操天天射| 中文字幕在线观看一区| 97成人在线观看| 欧美成人网在线| gogo人体一区| 女人天堂av手机在线| 久久众筹精品私拍模特| 黄色一级视频免费看| 中文字幕精品一区久久久久| 亚洲日本中文| 欧美乱做爰xxxⅹ久久久| 成人avav影音| 成人公开免费视频| 日韩亚洲欧美中文高清在线| 蜜桃精品视频| 精品久久一二三| 国产日韩欧美精品综合| 国产精品自偷自拍| 久久噜噜噜精品国产亚洲综合| 欧美顶级毛片在线播放| 亚洲 欧美 日韩系列| 亚洲欧美区自拍先锋| 少妇av在线播放| 国产精品一区二区三区在线播放 | 国产黄色av片| 91av视频在线| 手机在线一区二区三区| 香蕉久久久久久av成人| 一本一本久久a久久精品综合麻豆| av在线电影院| 国产精品一区二区三区四区五区| 国产精品最新自拍| 三级黄色录像视频| 亚洲国模精品私拍| 亚洲一区有码| 免费黄色福利视频| 亚洲摸摸操操av| 久久视频www| 99一区二区三区| 轻轻草成人在线| 日本中文字幕免费| 久久视频国产精品免费视频在线| 精品素人av|