亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript this 關鍵字 詳解

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

一、this指向構造函數實例化對象

在上篇文章中,我們提到了使用new和不使用new調用構造函數的區別,如下例:

復制代碼 代碼如下:

function Benjamin(username, sex) {
    this.username = username;
    this.sex = sex;
}
var benjamin = new Benjamin("zuojj", "male");
//Outputs: Benjamin{sex: "male",username: "zuojj"}
console.log(benjamin);
var ben = Benjamin("zhangsan", "female");
//Outputs: undefined
console.log(ben);

當構造函數當做普通函數被調用時,并沒有返回值,同時this指向全局對象。那么我們如何來避免因為缺少new關鍵字,而產生的問題呢?

復制代碼 代碼如下:

function Benjamin(username, sex) {
 //Check whether "this" is a "Benjamin" object
 if(this instanceof Benjamin) {
     this.username = username;
     this.sex = sex;
 }else {
  return new Benjamin(username, sex);
 }
}
var benjamin = new Benjamin("zuojj", "male");
//Outputs: Benjamin{sex: "male",username: "zuojj"}
console.log(benjamin);
var ben = Benjamin("zhangsan", "female");
//Outputs: Benjamin {username: "zhangsan", sex: "female"}
console.log(ben);

在上例中,我們首先檢查this是否是Benjammin的實例,如果不是,使用new自動調用構造函數,并實例化,這意味著,我們不再需要擔心,遺漏new關鍵字實例化構造函數。當然這樣我們可能會養成一個壞的習慣,如果避免這種現象呢?我們可以拋出一個錯誤,像下面這樣:

復制代碼 代碼如下:

function Benjamin(username, sex) {
 //Check whether "this" is a "Benjamin" object
 if(this instanceof Benjamin) {
     this.username = username;
     this.sex = sex;
 }else {
  // If not, throw error.
        throw new Error("`Benjamin` invoked without `new`");
 }
}

二、this指向調用該函數的對象

看下面的例子:

復制代碼 代碼如下:

var x = 10;
var obj = {
 x: 10,
 output: function() {
  //Outputs: true
  console.log(this === obj);
  return this.x;
 },
 innerobj: {
  x: 30,
  output: function() {
   //Outputs: true
   console.log(this === obj.innerobj);
   return this.x;
  }
 }
};
//Outputs: 10
console.log(obj.output());
//Outputs: 30
console.log(obj.innerobj.output());

三、this指向全局對象

在上面討論構造函數的時候我們也討論到不適用new的時候,this會指向全局對象,下面我們來看看兩種常見的容易犯錯的實例:

復制代碼 代碼如下:

var x = 100;
var obj = {
 x: 10,
 output: function() {
  (function() {
   //Outputs: true
   console.log(this === window);
   //Outputs: Inner: 100
   console.log("Inner:" + this.x);
  })();
  
  return this.x;
 }
};
//Outputs: 10
console.log(obj.output());

在使用閉包的時候,作用域發生變化,this指向window(瀏覽器中)。

復制代碼 代碼如下:

var x = 100;
var obj = {
 x: 10,
 output: function() {
  return this.x;
 }
};
var output = obj.output;
//Outputs: 10
console.log(obj.output());
//Outputs: 100
console.log(output());
var obj2 = {
 x: 30,
 output: obj.output
}
//Outputs: 30
console.log(obj2.output());

此時this始終指向函數調用時的對象。

四、this指向apply/call()方法指派的對象

復制代碼 代碼如下:

var x = 100;
var obj = {
 x: 10,
 output: function() {
  return this.x;
 }
};
//Outputs: 10
console.log(obj.output());
var obj2 = {
 x: 40,
 output: obj.output
}
//Outputs: 40
console.log(obj.output.call(obj2));
//Outputs: 10
console.log(obj2.output.apply(obj));

五、callback函數亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

国产一区二区三区三区在线观看| 亚洲中国色老太| 欧美日韩国产123| 亚洲乱码国产乱码精品精| 萌白酱国产一区二区| 亚洲一区二区三区四区在线播放| 最近2019中文字幕在线高清| 国产精品一二三在线| 在线观看视频99| 国产91精品久久久久久久| 国产精品欧美激情在线播放| 欧洲一区二区视频| 日韩黄色在线免费观看| 91亚洲精品一区二区| 国产精品极品尤物在线观看| 久久久国产精彩视频美女艺术照福利| 欧美亚洲一区在线| 久久亚洲精品中文字幕冲田杏梨| 国产成人极品视频| 国产激情久久久| 亚洲国产一区二区三区在线观看| 欧美视频免费在线观看| 亚洲专区国产精品| 69av视频在线播放| 国产成人综合精品在线| 欧美裸体xxxx极品少妇| 美女性感视频久久久| 97超碰色婷婷| 中文字幕亚洲欧美| 一区二区三区www| 国产精品久久久久7777婷婷| xvideos成人免费中文版| 国产精品综合不卡av| 亚洲综合色av| 亚洲男女自偷自拍图片另类| 精品偷拍一区二区三区在线看| 国产精品91免费在线| 国产欧美精品在线播放| 精品国产成人av| 青青草国产精品一区二区| 亚洲精品videossex少妇| 国产精品www网站| 日本一区二区在线免费播放| 国产精品美女主播在线观看纯欲| 国产精品色视频| 午夜精品美女自拍福到在线| 国产精品第一视频| 亚洲精品综合久久中文字幕| 亚洲韩国欧洲国产日产av| 日本国产一区二区三区| 亚洲一区亚洲二区| 91精品国产91| 欧美视频专区一二在线观看| 欧美激情精品久久久久久| 国产精品日韩专区| 国产精品一香蕉国产线看观看| 九九热在线精品视频| 欧美专区在线播放| 亚洲精品久久久一区二区三区| 欧美日韩在线免费观看| 欧美天天综合色影久久精品| 亚洲黄色有码视频| 91久久精品国产91久久| 中文字幕一精品亚洲无线一区| 国产精品丝袜高跟| 国产精品久久中文| 丝袜情趣国产精品| 欧美韩国理论所午夜片917电影| 777午夜精品福利在线观看| 久久精品一区中文字幕| 亚洲成人xxx| 91sa在线看| 亚洲精品国产综合久久| 国产精品视频不卡| 中文字幕日韩专区| 日本精品视频网站| 成人97在线观看视频| 亚洲国产日韩一区| 91久久久久久久久久久| 高清日韩电视剧大全免费播放在线观看| 91精品国产色综合| 视频直播国产精品| 日韩成人中文字幕| 欧美成人高清视频| 77777少妇光屁股久久一区| 精品久久久久久久久久| 亚洲第一天堂无码专区| 国产亚洲欧洲高清| 在线日韩日本国产亚洲| 国产精品爽爽爽爽爽爽在线观看| 96国产粉嫩美女| 亚洲国产精品久久久久秋霞蜜臀| 亚洲区一区二区| 久久伊人91精品综合网站| 日韩不卡在线观看| 成人av电影天堂| 日韩成人高清在线| 国产精品一久久香蕉国产线看观看| 久久夜精品va视频免费观看| 欧美色视频日本高清在线观看| 日韩免费观看在线观看| 91九色蝌蚪国产| 中文精品99久久国产香蕉| 亚洲欧美日韩久久久久久| 另类图片亚洲另类| 国产婷婷97碰碰久久人人蜜臀| 国产视频亚洲精品| 亚洲成人在线视频播放| 国产美女久久精品| 国产日韩欧美夫妻视频在线观看| 日韩免费不卡av| 热久久免费视频精品| 亚洲性xxxx| 国产福利精品视频| 91sao在线观看国产| 国产高清视频一区三区| 亚洲国产黄色片| 欧美视频在线看| 久久国产精品久久精品| 久久成人精品电影| 91国内产香蕉| 国产xxx69麻豆国语对白| 国产日韩综合一区二区性色av| 国产精品中文字幕在线观看| 欧美日韩在线影院| 91丝袜美腿美女视频网站| 亚洲国产欧美一区| 91欧美精品午夜性色福利在线| 久久九九热免费视频| 日韩精品免费看| 欧美野外猛男的大粗鳮| 成人亚洲激情网| 日本欧美在线视频| zzijzzij亚洲日本成熟少妇| 国产精品一区二区三| 国产视频久久久久久久| 国产精品一区电影| 日韩成人在线播放| 欧美成人免费观看| 亚洲最大成人免费视频| 欧美巨大黑人极品精男| 国产丝袜一区视频在线观看| 91精品国产综合久久香蕉最新版| 欧美激情第99页| 亚洲xxxx在线| 欧美日韩亚洲系列| 日韩大片免费观看视频播放| 伦伦影院午夜日韩欧美限制| 成人性生交大片免费看视频直播| 国产自产女人91一区在线观看| 国产成人涩涩涩视频在线观看| 亚洲欧美另类人妖| 成人午夜激情网| 亚洲xxx自由成熟| 自拍偷拍亚洲在线| 日本老师69xxx| 中文在线不卡视频| 国产亚洲欧美日韩精品| 久久精品在线视频| 亚洲美女av黄| 69影院欧美专区视频| 91精品国产高清久久久久久久久| 国产精品香蕉国产| 亚洲肉体裸体xxxx137|