国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

JavaScript中的this基本問題實例小結

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

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

在函數中 this 到底取何值,是在函數真正被調用執行的時候確定下來的,函數定義的時候確定不了。

執行上下文環境 :

**定義**:執行函數的時候,會產生一個上下文的對象,里面保存變量,函數聲明和this。

**作用**:用來保存本次運行時所需要的數據

當你在代碼中使用了 this,這個 this 的值就直接從執行的上下文中獲取了,而不會從作用域鏈中搜尋。

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

情況一:全局 & 調用普通函數

在全局環境中,this 永遠指向 window。

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

普通函數在調用時候(注意不是構造函數,前面不加 new),其中的 this 也是指向 window。

但是如果在嚴格模式下調用的話會報錯:

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

情況二:構造函數

所謂的構造函數就是由一個函數 new 出來的對象,一般構造函數的函數名首字母大寫,例如像 Object,Function,Array 這些都屬于構造函數。

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

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

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

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

情況三:對象方法

如果函數作為對象的方法時,方法中的 this 指向該對象。

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

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

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

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

在這里,如果想要調用上層作用域中的變量 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 函數不作為對象方法被調用:

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

obj.first 被賦值給一個全局變量,并沒有作為 obj 的一個屬性被調用,那么此時 this 的值是 window。

情況四:構造函數 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 函數中,this 指向的first 對象。不僅僅如此,即便是在整個原型鏈中,this 代表的也是當前對象的值。

情況五:函數用 call

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

當一個函數被 call調用時,this 的值就取傳入的對象的值。

來源:知乎

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

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

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲精品综合一二三区在线 | 亚洲一在线 | 一区二区精品视频 | 欧美成人精品不卡视频在线观看 | 婷婷在线成人免费观看搜索 | 精品在线网站 | 黄色成人免费网站 | 亚洲黄色免费网址 | 男人的天堂中文字幕 | 久久99精品这里精品3 | 亚洲国产精品成人综合久久久 | 中文字幕一区视频一线 | 俄罗斯美女在线观看一区 | 久久99视频精品 | 在线观看免费视频国产 | 91综合精品网站久久 | 91精品国产高清久久久久 | 亚洲影院中文字幕 | 久久99精品久久久久久国产越南 | 波多野结衣在线观看一区二区 | 日韩精品久久久毛片一区二区 | 精品视频国产狼人视频 | 九九精品视频一区在线 | 图片区偷拍区小说区 | 一级风流片a级国产 | 国内一区 | 免费一级淫片aaa片毛片a级 | 国产成人精品高清免费 | 国产精品视频成人 | 四虎免费大片aⅴ入口 | 国内精品久久久久影院不卡 | 欧美日韩亚洲一区二区三区 | 二区三区在线 | 白嫩美女一级毛片免费看 | 国产一区二区三区高清视频 | 加勒比一区二区 | 中文字幕亚洲精品日韩精品 | 在线观看片成人免费视频 | 亚洲精品久久久久影 | 久草在在线视频免费 | 初爱视频教程在线观看高清 |