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

前端百題斬——js中的這些“this”指向都值得了解

開發 前端
this是javascript中的一個關鍵字,其使用方法類似于一個變量,是執行上下文中一個重要組成部分。其作用是可以在函數體內部獲取當前的運行環境。

[[403989]]

14.1 簡介

this是javascript中的一個關鍵字,其使用方法類似于一個變量,是執行上下文中一個重要組成部分。其作用是可以在函數體內部獲取當前的運行環境。

14.2 指向

每個函數的this是在調用的時候基于函數的執行環境綁定的,this的指向完全取決于函數的調用位置。(下面均是在瀏覽器環境下進行測試的結果)

在全局環境下,this 始終指向全局對象(window), 無論是否嚴格模式;

  1. console.log(this); // window 

普通函數內部的this分兩種情況,嚴格模式和非嚴格模式。

(1)非嚴格模式下,this 默認指向全局對象window

(2)嚴格模式下, this為undefined

  1. function fun() { 
  2.     console.log(this); // window 

對象內部方法的this指向調用這些方法的對象

(1)函數的定義位置不影響其this指向,this指向只和調用函數的對象有關;

(2)多層嵌套的對象,內部方法的this指向離被調用函數最近的對象(window也是對象,其內部對象調用方法的this指向內部對象, 而非window)。

  1. const obj = { 
  2.     a: 10, 
  3.     b: 20, 
  4.     addfunction () { 
  5.         return this.a + this.b; 
  6.     } 
  7. }; 
  8.  
  9. console.log(obj.add()); // 30 
  10. const add = obj.add
  11. console.log(add()); // NaN 

原型鏈中的方法的this仍然指向調用它的對象

  1. const obj = { 
  2.     a: 10, 
  3.     b: 20 
  4. }; 
  5.  
  6. const prototypeObj = { 
  7.     addfunction () { 
  8.         return this.a + this.b; 
  9.     } 
  10. }; 
  11.  
  12. Object.setPrototypeOf(obj, prototypeObj); 
  13.  
  14. console.log(obj.add()); // 30 

當函數通過Function對象的原型中繼承的方法 call() 和 apply() 方法調用時, 其函數內部的this值可綁定到 call() & apply() 方法指定的第一個對象上, 如果第一個參數不是對象,JavaScript內部會嘗試將其轉換成對象然后指向它。(見后續代碼)

通過bind方法綁定后, 函數將被永遠綁定在其第一個參數對象上, 而無論其在什么情況下被調用。(見后續代碼)

當函數被當做監聽事件處理函數時, 其 this 指向觸發該事件的元素(針對于addEventListener事件)

  1. <button id="testId">按鈕</button> 
  2.  
  3. const btn = document.getElementById('testId'); 
  4. btn.addEventListener('click'function() { 
  5.  console.log(this); // <button id="testId">按鈕</button> 
  6. }); 

內聯事件中的this指向分兩種情況:

(1)當代碼被內聯處理函數調用時,它的this指向監聽器所在的DOM元素

  1. <button onclick="console.log(this)">按鈕</button> // 輸出該DOM節點 

(2)當代碼被包括在函數內部執行時,其this指向等同于 函數直接調用的情況,即在非嚴格模式指向全局對象window, 在嚴格模式指向undefined

  1. <button onclick="clickFun()">按鈕</button> 
  2.  
  3. function clickFun() { 
  4.  console.log(this); // window 

對于延時函數內部的回調函數的this指向全局對象window(當然可以通過bind方法改變其內部函數的this指向)

  1. function Fun() { 
  2.     this.a = 10; 
  3.     this.method = function() { 
  4.         setTimeout(function() { 
  5.             console.log(this); // window 
  6.         }, 1000); 
  7.     } 
  8.  
  9. const fun = new Fun(); 
  10. fun.method(); 

由于箭頭函數不綁定this, 它會捕獲其所在(即定義的位置)上下文的this值, 作為自己的this值,所以 call() / apply() / bind() 方法對于箭頭函數來說只是傳入參數,對它的 this 毫無影響。

  1. function Fun() { 
  2.     this.a = 10; 
  3.     this.method = function() { 
  4.         setTimeout(() => { 
  5.             console.log(this); // Fun {a: 10, method: ƒ} 
  6.         }, 1000); 
  7.     } 
  8.  
  9. const fun = new Fun(); 
  10. fun.method(); 

14.3 改變this指向

除了隱式綁定this的方式,還能夠通過顯示綁定的方式,通過call、apply、bind方式改變this指向,對于這三者的區別后續將有專門的百題斬去闡述,本節主要進行一波簡單使用。

call()

call() 方法使用一個指定的 this 值和單獨給出的一個或多個參數來調用一個函數。

  1. function method(val1, val2) { 
  2.     return this.a + this.b + val1 + val2; 
  3.  
  4. const obj = { 
  5.     a: 1, 
  6.     b: 2 
  7. }; 
  8.  
  9. console.log(method.call(obj, 3, 4)); // 10 

apply()

apply() 方法調用一個具有給定this值的函數,以及以一個數組(或類數組對象)的形式提供的參數。

  1. function method(val1, val2) { 
  2.     return this.a + this.b + val1 + val2; 
  3.  
  4. const obj = { 
  5.     a: 1, 
  6.     b: 2 
  7. }; 
  8.  
  9. console.log(method.apply(obj, [3, 4])); // 10 

bind()

bind() 方法創建一個新的函數,在 bind() 被調用時,這個新函數的 this 被指定為 bind() 的第一個參數,而其余參數將作為新函數的參數,供調用時使用。

  1. function method(val1, val2) { 
  2.     return this.a + this.b + val1 + val2; 
  3.  
  4. const obj = { 
  5.     a: 1, 
  6.     b: 2 
  7. }; 
  8.  
  9. const bindMethod = method.bind(obj, 3, 4); 
  10. console.log(bindMethod); // [Function: bound method] 
  11. console.log(bindMethod()); // 10 

擴展

 

  • call() 和 apply()的區別是call()方法接受的是參數列表,而apply()方法接受的是一個參數數組;
  • bind返回的是一個綁定函數,而call和apply返回的是運行結果;
  • 多次 bind() 是無效的,只會綁定到第一次調用的對象上;
  • call() / apply() / bind() 方法對于箭頭函數來說只是傳入參數,對它的 this 毫無影響。

本文轉載自微信公眾號「執鳶者」,可以通過以下二維碼關注。轉載本文請聯系執鳶者公眾號。

 

責任編輯:武曉燕 來源: 執鳶者
相關推薦

2021-05-19 07:02:42

JS對象方法

2021-05-12 07:04:55

Js變量方式

2021-08-04 06:56:49

HTTP緩存前端

2021-07-14 07:00:53

瀏覽器技巧前端

2021-06-02 07:02:42

js作用域函數

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運算符

2021-05-30 19:02:59

變量對象上下文

2021-06-09 07:01:30

前端CallApply

2014-08-19 14:12:47

Windows

2021-07-19 07:02:10

瀏覽器進程單進程瀏覽器

2021-11-19 09:01:09

防抖節流前端

2021-07-26 05:01:55

瀏覽器渲染流程

2021-10-18 09:01:01

前端賦值淺拷貝

2018-10-09 14:34:58

開源KubernetesGit

2021-01-07 05:40:13

BLE模塊Android

2021-05-27 07:02:05

JavaScript代碼設施

2021-07-05 07:02:33

前端跨域策略

2021-06-11 06:54:34

原型構造函數

2021-06-04 07:04:29

閉包JavaScript函數
點贊
收藏

51CTO技術棧公眾號

久久6免费视频| 亚洲人成网站在线观看播放 | 天天久久夜夜| 欧美亚洲国产一区二区三区va| 亚洲区一区二区三区| 精品国产999久久久免费| 在线亚洲精品| 久久久av亚洲男天堂| 欧美xxxx×黑人性爽| 一区在线影院| 亚洲18女电影在线观看| 亚洲欧洲精品一区| 五月天久久久久久| 国产综合一区二区| 热门国产精品亚洲第一区在线| 国产高清视频免费在线观看| 天天干天天草天天| 国产天堂在线| 国产sm精品调教视频网站| 日韩女优在线播放| 久久午夜鲁丝片午夜精品| 欧美一级本道电影免费专区| 精品国产亚洲在线| 亚洲精品第三页| 亚洲成a人片| 午夜精品爽啪视频| 国产专区在线视频| 自拍视频在线网| 91欧美激情一区二区三区成人| 成人写真福利网| www五月天com| 一本综合久久| 欧美黑人xxxx| www.97视频| 成人高清电影网站| 亚洲欧美激情精品一区二区| 亚洲一区二区三区黄色| 久久九九精品视频| 欧美男人的天堂一二区| 亚洲一区二区三区四区五区xx| а√天堂中文在线资源8| 亚洲少妇中出一区| 在线视频欧美一区| 日本中文字幕在线看| 中文字幕欧美激情| 日本成人三级电影网站| 欧美日韩国产亚洲沙发| 9i在线看片成人免费| 国产 高清 精品 在线 a| h片在线免费看| 国产一区二区毛片| 成人免费看黄网站| 国产乱人乱偷精品视频| 精品一区二区三区免费| 91夜夜揉人人捏人人添红杏| 国产尤物视频在线观看| 精彩视频一区二区三区| 91网在线免费观看| 精品国产九九九| 国产不卡视频在线播放| 国产精华一区| 亚洲av毛片成人精品| 久久亚洲欧美国产精品乐播| 麻豆蜜桃91| 成人在线观看网站| 国产精品国产三级国产aⅴ入口| 五码日韩精品一区二区三区视频| 二区三区在线播放| 国产精品国产三级国产三级人妇| 免费观看黄色大片| 污污网站在线观看| 午夜一区二区三区视频| 午夜精品久久久内射近拍高清| 波多视频一区| 欧美日韩综合在线| 欧美体内she精高潮| 黄色免费大全亚洲| 亚洲人成网在线播放| 中文字幕第二区| 伊人色**天天综合婷婷| 欧美激情精品久久久久久久变态| 看片网址国产福利av中文字幕| 日韩精品色哟哟| 成人精品久久久| 欧美性受xxxx狂喷水| 国产亚洲短视频| 国产精品jizz在线观看老狼| 免费网站在线观看人| 欧美性猛xxx| 色天使在线观看| www.亚洲一二| 一区二区三区视频在线| 久久久精品视频免费观看| 在线综合欧美| 成人黄色片网站| 五月天婷婷视频| 亚洲欧洲成人自拍| 日日摸日日碰夜夜爽av| 91精品网站在线观看| 亚洲国产欧美一区二区丝袜黑人| 成人性生交大片免费看无遮挡aⅴ| 中文字幕日韩一区二区不卡| 26uuu另类亚洲欧美日本老年| 中文字幕乱码人妻无码久久| 高清在线不卡av| 亚洲国产精品一区二区第四页av| 欧美xxx黑人xxx水蜜桃| 欧美伊人精品成人久久综合97| 日本一级大毛片a一| 国产精品一区高清| 欧美日本中文字幕| 在线观看免费观看在线| 99热99精品| 91看片淫黄大片91| 日韩一区精品| 亚洲男人天堂网站| 久久97人妻无码一区二区三区| 秋霞影院一区二区| 久久久久久久久久久久久久一区 | 午夜精品久久久久久99热| 青娱乐在线免费视频| 成人av电影在线观看| 国产a级片免费看| 电影天堂国产精品| 日韩成人中文字幕在线观看| 欧美日韩成人免费观看| 激情综合网天天干| 手机看片福利永久国产日韩| 天堂av在线网| 亚洲成人网在线| 黄色一级视频免费| 国产一区二区三区免费观看| 亚洲精品一区二区三区樱花| 在线男人天堂| 日韩电影中文字幕在线观看| 久草视频免费在线| 国产成人av电影在线观看| 中文字幕一区二区三区四区五区六区 | 一区二区三区免费在线看| 中文字幕亚洲一区在线观看| 精产国品一区二区| 久久先锋资源网| 欧美激情国产精品日韩| 日韩精选在线| 88xx成人精品| 日本一本草久在线中文| 欧美日韩亚洲视频一区| 自拍视频一区二区| 久久国产88| 日本三级中国三级99人妇网站| а√天堂中文在线资源8| 日韩av一区在线| 男人天堂av在线播放| 国产午夜久久久久| 狠狠躁狠狠躁视频专区| 久久精品国产亚洲夜色av网站| 国产美女主播一区| 超碰在线网址| 日韩久久精品一区| 国产午夜精品一区二区理论影院| 成人国产精品视频| 亚洲中文字幕无码中文字| 国产精品欧美日韩一区| 国产精品视频一| 超碰免费在线播放| 日韩精品一区二区三区老鸭窝| 久久久无码精品亚洲国产| 波多野结衣一区二区三区 | 国产精品77777| 精品人妻少妇一区二区| 日本欧美三级| 国产精品成人一区二区三区吃奶| 秋霞午夜在线观看| 日韩三级电影网址| 国产91在线视频| 国产裸体视频网站| 亚洲精品美女| 日韩欧美视频一区二区三区四区| 国产成人午夜性a一级毛片| 欧美成aaa人片免费看| 高清一区二区三区四区| 色屁屁一区二区| 亚洲不卡在线播放| av一区二区久久| 污网站免费在线| 狠狠爱综合网| 欧美三级电影在线播放| 久久久久久亚洲精品美女| 91精品国产色综合| 日本免费在线观看| 亚洲国产高清高潮精品美女| 久久午夜鲁丝片| 一级精品视频在线观看宜春院| 成人片黄网站色大片免费毛片| 精品系列免费在线观看| 中文字幕无码精品亚洲35| 日韩国产在线| 精品亚洲欧美日韩| 国产乱码精品一区二区三区亚洲人| 亚洲97在线观看| 免费在线观看黄色| 亚洲精品中文字幕av| 99久久精品国产色欲| 色偷偷一区二区三区| 久久久久香蕉视频| 国产精品成人一区二区三区夜夜夜| 国产激情视频网站| 国产一区二区伦理| 亚欧美在线观看| av不卡在线看| 精品人妻人人做人人爽| 99久久婷婷| 人禽交欧美网站免费| 久久综合社区| 99se婷婷在线视频观看| 欧洲精品久久久久毛片完整版| 97在线免费观看视频| a毛片在线看免费观看| 伊人男人综合视频网| 人成免费电影一二三区在线观看| 日韩欧美色综合| 国产一区二区在线视频观看| 欧美综合久久久| www五月天com| 欧美视频在线看| 激情综合网五月婷婷| 亚洲欧美日韩国产成人精品影院 | 欧美国产一区二区| 性色av蜜臀av色欲av| 成人一级视频在线观看| 日韩av自拍偷拍| 久久国产乱子精品免费女| 手机看片福利日韩| 免费看亚洲片| 国产午夜福利视频在线观看| 亚洲每日更新| 隔壁人妻偷人bd中字| 欧美日韩日本国产亚洲在线| 婷婷视频在线播放| 一级毛片免费高清中文字幕久久网| 亚洲精品日韩在线观看| 成人免费在线播放| 日韩一区免费观看| 日韩情爱电影在线观看| 亚洲国产欧美一区二区三区不卡| 精品久久久久久久| 亚洲精品国产系列| 久久国产亚洲精品| 伊人精品久久久久7777| 999久久久免费精品国产| 在线成人性视频| 真实国产乱子伦精品一区二区三区| 亚洲一区二区三区精品在线观看| 999久久久国产精品| 成年人三级视频| 欧美激情综合色综合啪啪| 日韩国产小视频| 1024精品一区二区三区| 青青青青草视频| 久久精品一本| 999精彩视频| 国产毛片精品国产一区二区三区| 欧美熟妇另类久久久久久多毛| 国产丶欧美丶日本不卡视频| 国产精九九网站漫画| 波多野结衣中文字幕一区二区三区| 成人精品在线观看视频| 久久精品视频在线免费观看| 日本人亚洲人jjzzjjz| 国产精品成人免费| 久草视频中文在线| 色综合久久99| 91成人在线免费| 精品国产免费一区二区三区香蕉| 污视频软件在线观看| 国产亚洲一级高清| 中文字幕在线三区| 2019亚洲日韩新视频| 青青伊人久久| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 色偷偷偷综合中文字幕;dd| а√天堂8资源在线官网| 久久人人爽人人爽人人片av高请| 丁香六月综合| 91欧美精品成人综合在线观看| 红杏aⅴ成人免费视频| 特级西西444www大精品视频| 午夜视频一区| 最近免费中文字幕中文高清百度| 狠狠色丁香婷婷综合| 国产福利在线观看视频| 国产精品久久综合| 日韩精品成人在线| 91精品国产综合久久精品app| 天天操天天干天天爽| 色综久久综合桃花网| 黄色视屏在线免费观看| 国产精品自产拍在线观看| 2023国产精华国产精品| 亚洲二区三区四区| 在线亚洲激情| 色综合久久久无码中文字幕波多| 国产亚洲欧美激情| 久久精品人妻一区二区三区| 欧美人狂配大交3d怪物一区 | 中文字幕日本精品| 55av亚洲| 亚洲japanese制服美女| 国产一区二区精品福利地址| 丁香婷婷综合激情| 看国产成人h片视频| 中文字幕 自拍| 精品久久久中文| 亚洲精品18在线观看| 日韩一级裸体免费视频| 自拍偷拍欧美视频| 国产伦理久久久| 欧美+亚洲+精品+三区| www.精品在线| 亚洲国产精品t66y| 日韩色图在线观看| 亚洲二区中文字幕| 欧美性video| 亚洲精品日韩av| 天天久久综合| jizz大全欧美jizzcom| 国产亚洲成年网址在线观看| 手机看片久久久| 亚洲国产精品久久久久秋霞不卡| 欧洲性视频在线播放| 亚洲精品日韩av| 中文精品久久| 佐山爱在线视频| 一区二区三区四区五区视频在线观看 | 亚洲黄色影院| 中文字幕天堂av| 亚洲国产精品久久人人爱| www.久久伊人| 欧美激情亚洲精品| 国产成人澳门| www.av91| 99精品偷自拍| 天天综合网入口| 国产视频亚洲精品| 深夜在线视频| 日本一区二区三区四区高清视频| 天堂av在线一区| 欧美成人国产精品一区二区| 日韩欧美高清视频| 久草在线网址| 国产精品久久久久久久久久久久久 | 日韩在线中文字幕| 国产一精品一av一免费爽爽| 狠狠干视频网站| 丁香激情综合五月| 日本系列第一页| 亚洲欧美综合精品久久成人| 午夜欧美巨大性欧美巨大 | 欧美日韩精品一区二区三区| 在线观看免费网站黄| 川上优av一区二区线观看| 欧美.www| 久久偷拍免费视频| 欧美在线观看一区| 麻豆91在线| 国产精品入口免费| 亚洲综合精品四区| 免费看黄色三级| 91精品午夜视频| 黄色漫画在线免费看| 日韩三级电影免费观看| 精品一区二区三区久久久| 国产性猛交普通话对白| 日韩精品视频三区| 国产精品第一国产精品| 好色先生视频污| av电影在线观看完整版一区二区| 亚洲成熟少妇视频在线观看| xvideos成人免费中文版| 日韩在线观看一区二区三区| 国产淫片免费看| 中文字幕亚洲欧美在线不卡| 亚洲伦理在线观看| 国产91在线高潮白浆在线观看| 亚洲综合中文| 在线观看日韩精品视频| 欧美二区乱c少妇| 麻豆mv在线观看| 中文字幕av日韩精品| 99久久国产综合精品色伊 | 极品尤物av久久免费看| 国产精品99无码一区二区| 伊人一区二区三区久久精品| **爰片久久毛片| 91制片厂毛片| 黑丝美女久久久| 香蕉久久aⅴ一区二区三区| 欧美不卡在线一区二区三区| 国产高清在线观看免费不卡| 伊人成年综合网|