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

首頁 > 語言 > JavaScript > 正文

JavaScript中this的用法及this在不同應(yīng)用場(chǎng)景的作用解析

2024-05-06 15:18:31
字體:
供稿:網(wǎng)友

由于其運(yùn)行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式。

JavaScript 中函數(shù)的調(diào)用有以下幾種方式:作為函數(shù)調(diào)用,作為對(duì)象方法調(diào)用,作為構(gòu)造函數(shù)調(diào)用,和使用 apply 或 call 調(diào)用。下面我們將按照調(diào)用方式的不同,分別討論 this 的含義。

情況一:純粹的函數(shù)調(diào)用

這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此this就代表全局對(duì)象Global。

1、函數(shù)也可以直接被調(diào)用,此時(shí) this 綁定到全局對(duì)象。

function makeNoSense(x) {   this.x = x; } makeNoSense(5); console.log(x);// x 已經(jīng)成為一個(gè)值為 5 的全局變量function test(){  this.x = 1;  alert(this.x);}test(); // 1

情況二:作為對(duì)象方法的調(diào)用

函數(shù)還可以作為某個(gè)對(duì)象的方法調(diào)用,這時(shí)this指代對(duì)象內(nèi)部屬性被調(diào)用。

var myObject = {  value :0,  increment:function (inc){    this.value += typeof inc ==='number' ? inc:1;  }};myObject.increment();console.log(myObject.value); //1myObject.increment(2);console.log(myObject.value); //3

情況三 :作為構(gòu)造函數(shù)調(diào)用

javaScript 支持面向?qū)ο笫骄幊蹋c主流的面向?qū)ο笫骄幊陶Z言不同,JavaScript 并沒有類(class)的概念,而是使用基于原型(prototype)的繼承方式。

相應(yīng)的,JavaScript 中的構(gòu)造函數(shù)也很特殊,如果不使用 new 調(diào)用,則和普通函數(shù)一樣。作為又一項(xiàng)約定俗成的準(zhǔn)則,構(gòu)造函數(shù)以大寫字母開頭,提醒調(diào)用者使用正確的方式調(diào)用。如果調(diào)用正確,this 綁定到新創(chuàng)建的對(duì)象上。

所謂構(gòu)造函數(shù),就是通過這個(gè)函數(shù)生成一個(gè)新對(duì)象(object)。這時(shí),this就指這個(gè)新對(duì)象。

function Point(x, y){   this.x = x;   this.y = y;  }var p1 = new Point(3,2);console.log(p1.x+","+p1.y);//3,2

為了表明這時(shí)this不是全局對(duì)象,我對(duì)代碼做一些改變:

var x = 4;function Point(x, y){   this.x = x;   this.y = y;  }var p1 = new Point(3,2);console.log(p1.x+","+p1.y);//3,2

情況四: apply或call調(diào)用

讓我們?cè)僖淮沃厣辏?JavaScript 中函數(shù)也是對(duì)象,對(duì)象則有方法,apply 和 call 就是函數(shù)對(duì)象的方法。這兩個(gè)方法異常強(qiáng)大,他們?cè)试S切換函數(shù)執(zhí)行的上下文環(huán)境(context),即 this 綁定的對(duì)象。很多 JavaScript 中的技巧以及類庫都用到了該方法。讓我們看一個(gè)具體的例子:

function Point(x, y){   this.x = x;   this.y = y;   this.moveTo = function(x, y){     this.x = x;     this.y = y;     console.log(this.x+","+this.y);  } } var p1 = new Point(0, 0); var p2 = {x: 0, y: 0}; p1.moveTo(1, 1); //1,1p1.moveTo.apply(p2, [10, 10]);//10,10            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 宿松县| 防城港市| 卢龙县| 顺平县| 海宁市| 剑阁县| 进贤县| 水城县| 光山县| 江孜县| 襄垣县| 舒兰市| 九江县| 闸北区| 广丰县| 青州市| 太和县| 峨山| 濮阳市| 柳州市| 佳木斯市| 岳西县| 葵青区| 星座| 锦州市| 项城市| 九江县| 揭阳市| 嘉义市| 江达县| 长武县| 富平县| 炉霍县| 永福县| 宁海县| 铜川市| 永和县| 准格尔旗| 桦川县| 新化县| 静海县|