日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

Web前端基础知识:ES5及ES6this详解

發(fā)布時(shí)間:2024/9/30 HTML 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web前端基础知识:ES5及ES6this详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

什么是this

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

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

在哪里吃:肯德基

誰吃:小明

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

//全局作用域下

Var myBody = document.body;

//window是可以省略的 當(dāng)前body元素的寬度都會(huì)被輸出

console.log(window.getComputedStyle(myBody).width;);//726px

console.log(getComputedStyle(myBody).width;);//726px

//我們?cè)谶@里輸出this ->window

console.log(this);//window

ES5中this的幾種情況

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

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

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

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

//這里我們寫兩個(gè)自執(zhí)行函數(shù)

~function(){

console.log(this); //->window

}();

(function (){

console.log(this);//->window

})();

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

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

//定義一個(gè)函數(shù)

function hello(){

console.log(this);

}

hello();//this->window

//定義一個(gè)對(duì)象設(shè)置屬性為hello值是對(duì)應(yīng)的那個(gè)函數(shù)

Var obj = {hello:hello};

//我們?cè)偃フ{(diào)用的時(shí)候 發(fā)現(xiàn)是obj這個(gè)對(duì)象調(diào)用的這個(gè)函數(shù) 那么obj就是當(dāng)前行為執(zhí)行的主體 和這個(gè)函數(shù)在哪里定義是沒有關(guān)系的。

Obj.hello(); //this->obj

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

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

//定義一個(gè)函數(shù)

function world(){

console.log(this);

}

//定義一個(gè)對(duì)象

Var obj = {name:”哈哈”};

//將obj變?yōu)檫@個(gè)方法行為執(zhí)行的主體

World.call(obj);//this->obj

//apply和bind同理只是傳遞參數(shù)和使用方式略有不同

ES6中this的幾種情況

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

let fn = () => {

console.log(this);

}

fn();//this->window

let obj = {

name: “obj”,

sum: function () {

fn(); //在widnow下定義的,所以它的宿主環(huán)境是widnow而不是sum

}

};

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

//類中的this

class Btn {

constructor(tagName) {

this.btn = document.querySelector(id);

thisthis.btn.onclick = this.click;

console.log(this); //this->這個(gè)類的實(shí)例

}

click() {

// 方法里的this指向調(diào)用者

console.log(this); //this->btn這個(gè)元素

}

}

var btn = new Btn(‘input’);

希望以上的分享能幫到大家。本文來自千鋒教育,轉(zhuǎn)載請(qǐng)注明出處。

總結(jié)

以上是生活随笔為你收集整理的Web前端基础知识:ES5及ES6this详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。