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

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

【W(wǎng)eb前端基礎(chǔ)知識(shí)】this詳解

  • 發(fā)布: Web前端培訓(xùn)
  • 來(lái)源:Web前端干貨資料
  • 2021-01-08 16:12:22
  • 閱讀()
  • 分享
  • 手機(jī)端入口

今天,我們學(xué)習(xí)一下JavaScript中的this。我們從什么是this,ES5及ES6中this的幾種情況進(jìn)行學(xué)習(xí)。讓this變的so easy,我們這里說(shuō)的都是非嚴(yán)格模式下。

什么是this

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

小明今天項(xiàng)目成功上線了,提前下班,不用加班了,獎(jiǎng)勵(lì)自己去肯德基吃一個(gè)漢堡,對(duì)于這句話(huà)我們簡(jiǎn)單的分析下:

在哪里吃:肯德基

誰(shuí)吃:小明

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

ES5中this的幾種情況

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

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

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

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

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

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

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

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

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

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

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

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

ES6中this的幾種情況

1.箭頭函數(shù)是沒(méi)有自己this的,this是繼承它的宿主環(huán)境(上級(jí)作用域) 宿主環(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類(lèi)構(gòu)造器中的this是當(dāng)前這個(gè)實(shí)例,而原型上的函數(shù)中的this指向調(diào)用者。

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

 

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

>>本文地址:http://m.jecan.cn/zhuanye/2021/64813.html

THE END  

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

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

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

快速通道fast track

近期開(kāi)班時(shí)間TIME

主站蜘蛛池模板: 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 飞象网 - 通信人每天必上的网站| 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分 | 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | 阜阳在线-阜阳综合门户 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 飞象网 - 通信人每天必上的网站| 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 高压负荷开关-苏州雷尔沃电器有限公司 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 |