国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript 中的 this 簡單規(guī)則

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:29:37
文檔

JavaScript 中的 this 簡單規(guī)則

JavaScript 中的 this 簡單規(guī)則:幾條規(guī)則確定函數(shù)里的 this 是什么。 想確定 this 是什么其實非常簡單。總體的規(guī)則是,通過檢查它的調(diào)用位置,在函數(shù)被調(diào)用的的時候確定 this。它遵循下面這些規(guī)則,接下來以優(yōu)先級順序說明。 規(guī)則 1、如果在調(diào)用函數(shù)時使用 new 關(guān)鍵字,那么函數(shù)里的 thi
推薦度:
導(dǎo)讀JavaScript 中的 this 簡單規(guī)則:幾條規(guī)則確定函數(shù)里的 this 是什么。 想確定 this 是什么其實非常簡單。總體的規(guī)則是,通過檢查它的調(diào)用位置,在函數(shù)被調(diào)用的的時候確定 this。它遵循下面這些規(guī)則,接下來以優(yōu)先級順序說明。 規(guī)則 1、如果在調(diào)用函數(shù)時使用 new 關(guān)鍵字,那么函數(shù)里的 thi

幾條規(guī)則確定函數(shù)里的 this 是什么。

想確定 this 是什么其實非常簡單。總體的規(guī)則是,通過檢查它的調(diào)用位置,在函數(shù)被調(diào)用的的時候確定 this。它遵循下面這些規(guī)則,接下來以優(yōu)先級順序說明。

規(guī)則

1、如果在調(diào)用函數(shù)時使用 new 關(guān)鍵字,那么函數(shù)里的 this 就是一個全新的對象。

function ConstructorExample() {
 console.log(this);
 this.value = 10;
 console.log(this);
}
new ConstructorExample();
// -> {}
// -> { value: 10 }

2、如果使用 apply、call 或者 bind 調(diào)用函數(shù),那么函數(shù)里的 this 就是作為參數(shù)傳進(jìn)去的對象。

function fn() {
 console.log(this);
}
var obj = {
 value: 5
};
var boundFn = fn.bind(obj);
boundFn(); // -> { value: 5 }
fn.call(obj); // -> { value: 5 }
fn.apply(obj); // -> { value: 5 }

3、如果函數(shù)作為一個方法調(diào)用,就是說如果使用點(diǎn)符號調(diào)用函數(shù),那么 this 就是擁有這個函數(shù)作為屬性的對象。換句話說,當(dāng)一個點(diǎn)在函數(shù)調(diào)用的左側(cè)時,this 就是這個點(diǎn)左側(cè)的那個對象。

var obj = {
 value: 5,
 printThis: function() {
 console.log(this);
 }
};
obj.printThis(); // -> { value: 5, printThis: ƒ }

4、如果函數(shù)作為一個純粹的函數(shù)調(diào)用,也就是說,它在沒有上述任何條件的情況下被調(diào)用,那么 this 就是全局對象。在瀏覽器里,就是 window 對象。

function fn() {
 console.log(this);
}
// 如果在瀏覽器里調(diào)用:
fn(); // -> Window {stop: ƒ, open: ƒ, alert: ƒ, ...}

注意這個規(guī)則其實和第三個規(guī)則是一樣的,區(qū)別在于沒有聲明為方法的函數(shù)會自動成為全局對象 window 的屬性。因此,這其實是一個隱式的方法調(diào)用。當(dāng)我們調(diào)用 fn(),其實就會被瀏覽器理解為 window.fn(),所以 this 就是 window。

console.log(fn === window.fn); // -> true

5、如果上述規(guī)則有多個適用,那么優(yōu)先級更高的就會設(shè)置 this 值。

6、如果是 ES2015 里的箭頭函數(shù),那么它將忽略上述所有規(guī)則,并在創(chuàng)建的時候接收包含它的作用域作為 this 的值。想確定 this 具體是什么的話,只需從創(chuàng)建箭頭函數(shù)那里往上一行,看看那兒的 this 是什么,箭頭函數(shù)里的 this 值和它一樣。

const obj = {
 value: 'abc',
 createArrowFn: function() {
 return () => console.log(this);
 }
};
const arrowFn = obj.createArrowFn();
arrowFn(); // -> { value: 'abc', createArrowFn: ƒ }

看回第三個規(guī)則,當(dāng)我們調(diào)用 obj.createArrowFn() 的時候,createArrowFn 里的 this 是 obj,因為這是方法調(diào)用。因此,obj 會在 arrowFn 里綁定到 this 上。如果我們在全局作用域創(chuàng)建一個箭頭函數(shù),那么 this 值就會是 window。

應(yīng)用規(guī)則

讓我們來看一個代碼示例,并應(yīng)用這些規(guī)則。嘗試一下看能否弄清楚不同的函數(shù)調(diào)用下,this 是什么。

確定應(yīng)用了哪條規(guī)則

var obj = {
 value: 'hi',
 printThis: function() {
 console.log(this);
 }
};
var print = obj.printThis;
obj.printThis(); // -> {value: "hi", printThis: ƒ}
print(); // -> Window {stop: ƒ, open: ƒ, alert: ƒ, ...}

obj.printThis() 屬于第三條規(guī)則,方法調(diào)用。另一方面,print() 屬于第四條規(guī)則,純粹的函數(shù)調(diào)用。對于 print() 來說,我們在調(diào)用的時候沒有使用 new、bind/call/apply 或者點(diǎn)符號,所以它對應(yīng)了規(guī)則四,this 就是全局對象 window。

當(dāng)適用多個規(guī)則的時候

當(dāng)適用多個規(guī)則的時候,使用列表里更高優(yōu)先級的規(guī)則。

var obj1 = {
 value: 'hi',
 print: function() {
 console.log(this);
 },
};
var obj2 = { value: 17 };

如果規(guī)則二和規(guī)則三同時適用,那么規(guī)則二占優(yōu)。

obj1.print.call(obj2); // -> { value: 17 }

如果規(guī)則一和規(guī)則三同時適用,那么規(guī)則一占優(yōu)。

new obj1.print(); // -> {}

有些庫有時候會故意將 this 值綁定到某些函數(shù)里。而通常會在函數(shù)里將最有用的值綁定到 this 上使用。舉個例子,jQuery 把 this 綁定到 DOM 元素上,在回調(diào)中觸發(fā)一個事件。如果某個庫出現(xiàn)一個不太符合上述規(guī)則的 this 值,那么請仔細(xì)閱讀這個庫的文檔,它很有可能使用 bind 綁定了。

總結(jié)

以上所述是小編給大家介紹的JavaScript 中的 this 簡單規(guī)則,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript 中的 this 簡單規(guī)則

JavaScript 中的 this 簡單規(guī)則:幾條規(guī)則確定函數(shù)里的 this 是什么。 想確定 this 是什么其實非常簡單。總體的規(guī)則是,通過檢查它的調(diào)用位置,在函數(shù)被調(diào)用的的時候確定 this。它遵循下面這些規(guī)則,接下來以優(yōu)先級順序說明。 規(guī)則 1、如果在調(diào)用函數(shù)時使用 new 關(guān)鍵字,那么函數(shù)里的 thi
推薦度:
標(biāo)簽: 中的 里的 規(guī)則
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲男同在线观看 | 国产福利久久青青草原下载 | 免费在线观看一区二区 | 美女一级毛片免费观看 | 亚洲v欧美 | 亚洲国产成人久久综合野外 | 日韩高清在线观看 | 我被公睡做舒服爽中文字幕 | 欧美视频一区二区三区 | 国产精品亚洲一区二区三区 | 伊人网中文字幕 | 亚洲日韩欧美一区二区在线 | 亚洲视频在线视频 | 国产成人综合久久精品尤物 | 欧美一级淫片吊带丝袜 | 一级a毛片免费观看久久精品 | 一区二区国产精品 | 亚洲第一区在线观看 | 日本特级淫片免费 | 极品美女一区二区三区 | 亚洲日本乱码中文论理在线电影 | 国内免费视频成人精品 | 高龄五十路中出 | 亚洲欧洲在线视频 | www欧美在线观看 | 欧美久久久久久久一区二区三区 | 亚洲国产欧美在线 | 91精品啪国产在线观看免费牛牛 | 国产在线观看免费一级 | 欧美伊人久久大香线蕉综合69 | 国产亚洲一区二区三区不卡 | 国产美女精品久久久久中文 | 亚洲欧美日本另类 | 国产欧美日本亚洲精品五区 | 欧美高清视频在线 | 日韩欧美一区二区三区免费看 | 日本高清一区二区三区不卡免费 | 国产欧美日韩另类 | 91精品国产91久久久久福利 | 另类专区欧美 | 欧美亚洲国产精品 |