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

首頁 > 語言 > JavaScript > 正文

簡單分析js中的this的原理

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

很多人可能會有疑問,this到底是什么?為什么this的值變化多端?

首先我們來概括下this.

this是一個對象,一般存在于函數中,表示當前函數的執行上下文;

值得一提的是,當函數在執行后,this才有綁定的對象,函數未執行時,this沒有內容

接下來我們看看在不同場景下的this的指向

1.函數默認執行 :此時this指向Window

 function fn(){  console.log(this)    //Window };fn();

在嚴格模式開啟后,this的指向又有所不同

嚴格模式下 : this指向undefined

 function fn(){  "use strict"  console.log(this)    //undefined }; fn();

2.函數的隱式執行 : this指向函數的直接執行對象

function fn(){    console.log(this);       };   var a = 10;   var obj = {    a:20,    b:fn   };   obj.b();        //this指向obj  var obj2 = {    a:30,    b:obj.b   };   obj2.b();       //this指向obj2  var obj3 = {    a:40,   b:obj2          };  obj3.b.b();      //obj3.b.b等價于obj2.b this指向obj2

但當函數作為參數傳到另一個函數的變量時, 發生隱式丟失,this指向Window

function fn(){   console.log(this)  //Window  };  var obj = {   a:20,   b:fn  }; setTimeout(obj.b, 1000);  function setTimeout(cb,t){   cb();        //obj.b作為參數傳給cb,而cb前沒對象,相當于默認方式執行fn()   };

3.函數的顯式執行 : this指向指定對象

我們可以通過函數的bind、call、apply方式指定this的對象,還可以用來修復上文中的隱式丟失

var obj = {  name: "obj",  show: function () {   console.log(this.name)  } } obj.show();      //obj var obj2 = {  name: "obj2" }; obj.show.bind(obj2)();   //obj2 var name = "蠟筆笑嘻嘻";    obj.show.bind(window)();  //Window

4.構造函數執行(通過new執行)

構造函數中的this 會指向創建出來的實例對象

 function Person() {  this.name = 'zhar'; } var p = new Person(); console.log(p.name);  //zhar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。

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

圖片精選

主站蜘蛛池模板: 镇江市| 衡阳市| 修水县| 分宜县| 洛隆县| 巴楚县| 西平县| 金川县| 错那县| 肥城市| 揭阳市| 大足县| 十堰市| 章丘市| 庆安县| 疏附县| 黄浦区| 阳西县| 高邮市| 边坝县| 府谷县| 东兴市| 罗定市| 许昌市| 叙永县| 天门市| 武宁县| 白山市| 赣榆县| 沽源县| 江华| 五家渠市| 根河市| 蒙自县| 临高县| 温州市| 兴化市| 临汾市| 南丰县| 永丰县| 香港 |