国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript中this用法實例詳解

2024-05-06 15:18:55
字體:
來源:轉載
供稿:網友

本文實例講述了javascript中this用法。分享給大家供大家參考,具體如下:

JavaScript中的this含義非常豐富,它可以是全局對象,當前對象或者是任意對象,這都取決于函數的調用方式。函數有以下幾種調用方式:作為對象方法調用、作為函數調用、作為構造函數調用、apply或call調用。

對象方法調用

作為對象方法調用的時候,this會被綁定到該對象。

var point = { x : 0, y : 0, moveTo : function(x, y) {   this.x = this.x + x;   this.y = this.y + y;   }};point.moveTo(1, 1)//this 綁定到當前對象,即 point 對象

這里我想強調一點內容,就是this是在函數執行的時候去獲取對應的值,而不是函數定義時。即使是對象方法調用,如果該方法的函數屬性以函數名的形式傳入別的作用域,也會改變this的指向。我舉一個例子:

var a = {  aa : 0,  bb : 0,  fun : function(x,y){    this.aa = this.aa + x;    this.bb = this.bb + y;  }};var aa = 1;var b = {  aa:0,  bb:0,  fun : function(){return this.aa;}}a.fun(3,2);document.write(a.aa);//3,this指向對象本身document.write(b.fun());//0,this指向對象本身(function(aa){//注意傳入的是函數,而不是函數執行的結果  var c = aa();  document.write(c);//1 , 由于fun在該處執行,導致this不再指向對象本身,而是這里的window})(b.fun);

這樣就明白了吧。這是一個容易混淆的地方。

函數調用

函數也可以直接被調用,這個時候this被綁定到了全局對象。

var x = 1;function test(){  this.x = 0;}test();alert(x); //0

但這樣就會出現一些問題,就是在函數內部定義的函數,其this也會指向全局,而和我們希望的恰恰相反。代碼如下:

var point = { x : 0, y : 0, moveTo : function(x, y) {   // 內部函數   var moveX = function(x) {   this.x = x;//this 綁定到了全局  };  // 內部函數  var moveY = function(y) {  this.y = y;//this 綁定到了全局  };  moveX(x);  moveY(y);  }};point.moveTo(1, 1);point.x; //==>0point.y; //==>0x; //==>1y; //==>1

我們會發現不但我們希望的移動呢效果沒有完成,反而會多出兩個全局變量。那么如何解決呢?只要要進入函數中的函數時將this保存到一個變量中,再運用該變量即可。代碼如下:

var point = { x : 0, y : 0, moveTo : function(x, y) {   var that = this;   // 內部函數   var moveX = function(x) {   that.x = x;   };   // 內部函數   var moveY = function(y) {   that.y = y;   }   moveX(x);   moveY(y);   }};point.moveTo(1, 1);point.x; //==>1point.y; //==>1

構造函數調用

在javascript中自己創建構造函數時可以利用this來指向新創建的對象上。這樣就可以避免函數中的this指向全局了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 陆良县| 上犹县| 肇庆市| 延津县| 辽源市| 辉县市| 孟州市| 苍山县| 萨迦县| 井冈山市| 济阳县| 汶上县| 江陵县| 石台县| 吉安市| 诏安县| 绩溪县| 富宁县| 凤凰县| 太仓市| 临潭县| 札达县| 曲周县| 磐石市| 吉安县| 盈江县| 顺昌县| 怀远县| 文水县| 新郑市| 普格县| 泸定县| 伊川县| 湖南省| 福安市| 成武县| 安岳县| 常州市| 仁化县| 金乡县| 深圳市|