实战IT培训机构_黄色激情网站_IT培训班选大学生IT技术培训中心_黄色激情视频网站_中公优就业

400-650-7353
您所在的位置:首頁 > IT干貨資料 > web前端 > 【W(wǎng)eb前端基礎(chǔ)知識】ES5及ES6this詳解

【W(wǎng)eb前端基礎(chǔ)知識】ES5及ES6this詳解

  • 發(fā)布: 優(yōu)就業(yè)it培訓
  • 來源:優(yōu)就業(yè)
  • 2021-03-22 16:34:27
  • 閱讀()
  • 分享
  • 手機端入口

今天,我們學習一下JavaScript中的this。我們從什么是this,ES5及ES6中this的幾種情況進行學習。讓this變的so easy,我們這里說的都是非嚴格模式下。

什么是this

this表示當前行為執(zhí)行的主體,在javaScript中this不是函數(shù)獨有的,但是我們主要研究的是函數(shù)中的this,為了方便大家理解我們舉個例子。

小明今天項目成功上線了,提前下班,不用加班了,獎勵自己去肯德基吃一個漢堡,對于這句話我們簡單的分析下:

在哪里吃:肯德基

誰吃:小明

在這里肯德基是吃的環(huán)境,小明是當前吃這個行為的主體。

  1. //全局作用域下 
  2. Var myBody = document.body; 
  3. //window是可以省略的  當前body元素的寬度都會被輸出 
  4. console.log(window.getComputedStyle(myBody).width;);//726px 
  5. console.log(getComputedStyle(myBody).width;);//726px 
  6. //我們在這里輸出this  ->window 
  7. console.log(this);//window   

ES5中this的幾種情況

1.全局作用域下的this是window

前邊的我們說過this代表當前行為執(zhí)行的主體,在全局作用域下所有的屬性和方法都是window的屬性和方法,并且window是可以省略的。那么也就是說我們?nèi)フ{(diào)用一個方法在全局作用域下,誰調(diào)用的也就是window調(diào)用,那么window就是當前行為執(zhí)行的主體,和去肯德基吃漢堡是一樣的誰吃小明,那么小明就是當前行為執(zhí)行的主體。

2.自執(zhí)行函數(shù)中的this是window

在javaScript中我們主要研究的是函數(shù)中的this,自執(zhí)行函數(shù)中的this永遠是window,因為函數(shù)就是一個方法,一種行為,這個行為是直接執(zhí)行的,那么執(zhí)行的主體就是window。

  1. //這里我們寫兩個自執(zhí)行函數(shù) 
  2. ~function(){ 
  3. console.log(this);  //->window 
  4. }(); 
  5.  
  6. (function (){ 
  7. console.log(this);//->window 
  8. })(); 

3.當前函數(shù)執(zhí)行就看前面有沒有點(.),點前面是誰this就是誰,和當前函數(shù)在哪里定義的及在哪里執(zhí)行的沒有關(guān)系,沒有點就是window.

還是一樣的道理,.前面就表示當前行為執(zhí)行的主體。如果沒有依然當前行為執(zhí)行的主體是window.

  1. //定義一個函數(shù) 
  2. function hello(){ 
  3. console.log(this); 
  4. hello();//this->window 
  5. //定義一個對象設(shè)置屬性為hello值是對應(yīng)的那個函數(shù) 
  6. Var obj = {hello:hello}; 
  7. //我們再去調(diào)用的時候  發(fā)現(xiàn)是obj這個對象調(diào)用的這個函數(shù)  那么obj就是當前行為執(zhí)行的主體  和這個函數(shù)在哪里定義是沒有關(guān)系的。 
  8. Obj.hello(); //this->obj 

4.call,apply,bind改變this指向問題就看方法中的第一個參數(shù)是誰this就是誰。

首先call,apply,bind這三個方法都是用來改變this的指向,其實本質(zhì)就是改變當前行為執(zhí)行的主體。由于這個三個方法第一個參數(shù)傳遞都是當前行為執(zhí)行的主體。所以就看第一個參數(shù)即可。

  1. //定義一個函數(shù) 
  2. function world(){ 
  3.    console.log(this); 
  4. //定義一個對象 
  5. Var obj = {name:”哈哈”}; 
  6. //將obj變?yōu)檫@個方法行為執(zhí)行的主體 
  7. World.call(obj);//this->obj 
  8. //apply和bind同理只是傳遞參數(shù)和使用方式略有不同 

ES6中this的幾種情況

1.箭頭函數(shù)是沒有自己this的,this是繼承它的宿主環(huán)境(上級作用域) 宿主環(huán)境不是執(zhí)行的環(huán)境,而是定義的環(huán)境。

  1. let fn = () => { 
  2.     console.log(this); 
  3.  
  4. fn();//this->window 
  5.  let obj = { 
  6.   name: "obj", 
  7.   sum: function () { 
  8.    fn(); //在widnow下定義的,所以它的宿主環(huán)境是widnow而不是sum 
  9.    } 
  10.  }; 

2. ES6類構(gòu)造器中的this是當前這個實例,而原型上的函數(shù)中的this指向調(diào)用者。

  1. //類中的this 
  2.         class Btn { 
  3.             constructor(tagName) { 
  4.                 this.btn = document.querySelector(id); 
  5.                 thisthis.btn.onclick = this.click; 
  6.                 console.log(this); //this->這個類的實例 
  7.             } 
  8.             click() { 
  9.                 // 方法里的this指向調(diào)用者 
  10.                 console.log(this); //this->btn這個元素 
  11.             } 
  12.         } 
  13.         var btn = new Btn('input'); 
  14.      

 

文章“【W(wǎng)eb前端基礎(chǔ)知識】ES5及ES6this詳解”已幫助

>>本文地址:http://www.jecan.cn/zhuanye/2021/68023.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計室內(nèi)設(shè)計
  • 平面設(shè)計平面設(shè)計
  • 電商設(shè)計電商設(shè)計
  • 網(wǎng)頁設(shè)計網(wǎng)頁設(shè)計
  • 全鏈路UI/UE設(shè)計UI設(shè)計
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發(fā)智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 德州万泰装饰 - 万泰装饰装修设计软装家居馆 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 福建自考_福建自学考试网 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 宝鸡市人民医院| 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 壹作文_中小学生优秀满分作文大全| 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 亚克隆,RNAi干扰检测,miRNA定量检测-上海基屹生物科技有限公司 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 上海赞永| 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 早报网| 深圳市八百通智能技术有限公司官方网站 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 |