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

首頁 > 編程 > JavaScript > 正文

Javascript中this的用法詳解

2019-11-20 14:07:14
字體:
來源:轉載
供稿:網友

前些日子面試的時候用到了this,面試官說我的理解有點偏差,回來看了下書和一些博客,做了點測試,發現自己的理解的確有誤

1.全局變量

應該是最常用的吧,函數中調用一個this,這里其實就是全局變量

var value="0"; function mei(){  var value="1";  console.log(this.value); //0  console.log(value);   //1 } mei();

輸出0就是因為this指向的是全局

2.構造函數

這是我比較熟悉的用法,構造函數中用this,new一個新的對象后this就指向了這個新的對象

var value="window"; function mei(){  this.value=1;  this.show=function(){   console.log(this.value)  } } var m=new mei(); console.log(m.value);  //1 m.show();        //1

可以看到輸出的是1而并不是window,可見由于構造函數,這里的this已經指向新的對象了而不是全局變量

3.call和apply

直接借用我的call和apply的博客中的例子

 var p="456";  function f1(){   this.p="123";  }  function f2() {   console.log(this.p);  }  f2();       //456  f2.call(f1());  //123  f2.apply(f1());  //123

第一行輸出456很好理解,this指向全局,后面的123是因為使用了call或者apply后,f2中的this指向了f1,而f1中的p為123,具體解釋直接戳那篇博文

4.函數作為某個對象的方法調用(我出錯的地方)

當時讓我寫一個對象有幾個方法,我腦子一抽定義了個全局變量,然后在對象的方法里用this調用,面試官問我這個this是什么?我說應該是window,因為這種方式我用的少,以為只有new或者call才會改變this的指向,他就說不對,讓我回去自己看看,現在試了試,我還真是錯了,貼代碼

var value="father"; function mei(){} mei.value="child"; mei.get=function(){console.log(this.value)}; mei.show=function(){console.log(value)}; mei.get();   //child mei.show();  //father

由于get是作為mei的方法調用的,因此這里的this指向了mei.value所以輸出child

至于father我是這樣理解的,show指向的函數是定義在全局環境下的,由于作用域鏈,在show中沒有找到value,于是就去定義他的環境中找,這就找到了全局的value,如果這里有理解錯誤的話希望有朋友可以指出來!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 驻马店市| 滨州市| 迭部县| 汝南县| 敦化市| 洛南县| 牡丹江市| 淮滨县| 朝阳市| 安福县| 上杭县| 巩留县| 新余市| 广宁县| 博客| 宜城市| 百色市| 巴青县| 新闻| 信丰县| 沧州市| 综艺| 北流市| 怀远县| 吐鲁番市| 长顺县| 崇明县| 陕西省| 仁化县| 仙桃市| 天祝| 栖霞市| 响水县| 西安市| 云安县| 贺州市| 桃园县| 镇康县| 常熟市| 新田县| 边坝县|