久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript中的this基本問題實(shí)例小結(jié)

瀏覽:132日期:2023-11-08 11:10:58

本文實(shí)例講述了JavaScript中的this基本問題.分享給大家供大家參考,具體如下:

在函數(shù)中 this 到底取何值,是在函數(shù)真正被調(diào)用執(zhí)行的時(shí)候確定下來的,函數(shù)定義的時(shí)候確定不了。

執(zhí)行上下文環(huán)境 :

**定義**:執(zhí)行函數(shù)的時(shí)候,會產(chǎn)生一個(gè)上下文的對象,里面保存變量,函數(shù)聲明和this。

**作用**:用來保存本次運(yùn)行時(shí)所需要的數(shù)據(jù)

當(dāng)你在代碼中使用了 this,這個(gè) this 的值就直接從執(zhí)行的上下文中獲取了,而不會從作用域鏈中搜尋。

關(guān)于 this 的取值,大體上可以分為以下幾種情況:

情況一:全局 & 調(diào)用普通函數(shù)

在全局環(huán)境中,this 永遠(yuǎn)指向 window。

console.log(this === window); //true

普通函數(shù)在調(diào)用時(shí)候(注意不是構(gòu)造函數(shù),前面不加 new),其中的 this 也是指向 window。

但是如果在嚴(yán)格模式下調(diào)用的話會報(bào)錯(cuò):

var x = 1;function first(){ console.log(this); // undefined console.log(this.x); // Uncaught TypeError: Cannot read property ’x’ of undefined}first();

情況二:構(gòu)造函數(shù)

所謂的構(gòu)造函數(shù)就是由一個(gè)函數(shù) new 出來的對象,一般構(gòu)造函數(shù)的函數(shù)名首字母大寫,例如像 Object,F(xiàn)unction,Array 這些都屬于構(gòu)造函數(shù)。

function First(){ this.x = 1; console.log(this); //First {x:1}}var first = new First();console.log(first.x); //1

上述代碼,如果函數(shù)作為構(gòu)造函數(shù)使用,那么其中的 this 就代表它即將 new 出來的對象。

但是如果直接調(diào)用 First函數(shù),而不是 new First(),那就變成情況1,這時(shí)候 First() 就變成普通函數(shù)。

function First(){ this.x =1; console.log(this); //Window}var first = First();console.log(first.x); //undefined

情況三:對象方法

如果函數(shù)作為對象的方法時(shí),方法中的 this 指向該對象。

var obj = { x: 1, first: function () { console.log(this); //Object console.log(this.x); //1 }};obj.first();

注意:若是在對象方法中定義函數(shù),那么情況就不同了。

var obj = { x: 1, first: function () { function second(){ console.log(this); //Window console.log(this.x); //undefined } second(); }}obj.first();

可以這么理解:函數(shù) second雖然是在 obj.first 內(nèi)部定義的,但它仍然屬于一個(gè)普通函數(shù),this 仍指向 window。

在這里,如果想要調(diào)用上層作用域中的變量 obj.x,可以使用 self 緩存外部 this 變量。

var obj = { x:1, first: function () { var self = this; function second(){ console.log(self); //{x: 1} console.log(self.x); //1 } second(); }}obj.first();

如果 first 函數(shù)不作為對象方法被調(diào)用:

var obj = { x: 1, first: function () { console.log(this); //Window console.log(this.x); //undefined }};var fn = obj.first;fn();

obj.first 被賦值給一個(gè)全局變量,并沒有作為 obj 的一個(gè)屬性被調(diào)用,那么此時(shí) this 的值是 window。

情況四:構(gòu)造函數(shù) prototype 屬性

function First(){ this.x = 1;}First.prototype.getX = function () { console.log(this); //First {x: 1, getX: function} console.log(this.x); //1}var first= new First();first.getX();

在 First.prototype.getX 函數(shù)中,this 指向的first 對象。不僅僅如此,即便是在整個(gè)原型鏈中,this 代表的也是當(dāng)前對象的值。

情況五:函數(shù)用 call

var obj = { x:1}function first(){ console.log(this); //{x: 1} console.log(this.x); //1}first.call(obj);

當(dāng)一個(gè)函數(shù)被 call調(diào)用時(shí),this 的值就取傳入的對象的值。

來源:知乎

鏈接:https://zhuanlan.zhihu.com/p/25294187?utm_source=com.youdao.note&utm_medium=social

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具:http://tools.jb51.net/code/WebCodeRun測試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 鄂托克旗| 东至县| 桐梓县| 项城市| 许昌县| 旬邑县| 瑞安市| 库伦旗| 盘山县| 迁安市| 宣化县| 北安市| 赞皇县| 伊春市| 和田县| 邻水| 长顺县| 济阳县| 门源| 保山市| 讷河市| 格尔木市| 东阿县| 工布江达县| 铜山县| 宁河县| 井冈山市| 宁武县| 麻城市| 临城县| 含山县| 唐河县| 化州市| 久治县| 镶黄旗| 晋江市| 莆田市| 延吉市| 抚州市| 黄浦区| 白城市|