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

首頁 > 語言 > JavaScript > 正文

Javascript this 關鍵字 詳解

2024-05-06 16:10:01
字體:
來源:轉載
供稿:網友
Javascript是一種很靈活的語言, 而This關鍵字又是靈活中的靈活, 但是因為它的靈活, 也注定了它的難用.以前我用this的時候, 都會覺得不踏實, 老是擔心它不知道怎么地就會指到另外的什么地方.其實, 這都是因為, 我們對它的不了解.
 
 

一、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函數內的this指向調用該callback的函數的this所指向的對象

 

復制代碼代碼如下:

//<input type="text" value="3" id="txt_username">
$("#username").on("click", function() {
 console.log(this.value);
});

 

六、Function.prototype.bind中的this

The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.
實例一:

 

復制代碼代碼如下:

function person() {
 return this.name;
}
//Function.prototype.bind
var per = person.bind({
 name: "zuojj"
});
console.log(per);
var obj = {
 name: "Ben",
 person: person,
 per: per
};
//Outputs: Ben, zuojj
console.log(obj.person(), obj.per());

 

實例二:

 

復制代碼代碼如下:

this.x = 9; 
var module = {
  x: 81,
  getX: function() { return this.x; }
};
//Outputs: 81
console.log(module.getX()); 
var getX = module.getX;
//Outputs: 9, because in this case, "this" refers to the global object
console.log(getX); 
// create a new function with 'this' bound to module
var boundGetX = getX.bind(module);
//Outputs: 81
console.log(boundGetX());

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产www精品| 美女视频黄免费的亚洲男人天堂| 91精品国产综合久久香蕉922| 韩国精品美女www爽爽爽视频| 精品成人久久av| 亚洲在线www| 日韩一区二区三区xxxx| 亚洲a一级视频| 成人妇女淫片aaaa视频| 久精品免费视频| 成人免费网站在线| 亚洲欧美一区二区激情| 欧美成人合集magnet| 超薄丝袜一区二区| 秋霞成人午夜鲁丝一区二区三区| 精品福利免费观看| 992tv成人免费视频| 综合国产在线观看| 91精品国产乱码久久久久久蜜臀| 91国内揄拍国内精品对白| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品自拍小视频| 成人久久一区二区三区| 日本久久精品视频| 日韩精品在线观看网站| 日韩av理论片| 国产日韩在线精品av| 伊人久久免费视频| 亚洲区一区二区| 中文字幕av一区| 欧美午夜片在线免费观看| 日本一本a高清免费不卡| 亚洲午夜未删减在线观看| 日韩欧美有码在线| 国产亚洲免费的视频看| 九色精品美女在线| 欧美另类99xxxxx| 国产97在线|亚洲| 欧美精品一本久久男人的天堂| 精品久久久国产| 亚洲精品自拍视频| 成人精品久久一区二区三区| 欧美极品美女电影一区| 国产91免费看片| 国产成人免费91av在线| 456国产精品| www.亚洲男人天堂| 亚洲成**性毛茸茸| 2019中文字幕在线免费观看| 国产成人亚洲精品| 91老司机在线| 欧美日韩午夜剧场| 日韩精品极品视频| 亚洲第一区中文99精品| www.日韩系列| 97国产精品视频人人做人人爱| 亚洲欧美国产精品| 菠萝蜜影院一区二区免费| 日本一本a高清免费不卡| 91亚洲精品久久久| 在线亚洲国产精品网| 亚洲一品av免费观看| 国产成人福利夜色影视| 国产精选久久久久久| 亚洲风情亚aⅴ在线发布| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久久久久粉嫩av| 国产91精品黑色丝袜高跟鞋| 中文字幕亚洲第一| 国产精品久久中文| 亚洲天堂影视av| 国产精品久久久久久网站| 欧美午夜精品久久久久久人妖| 97在线免费观看视频| 欧美性xxxxxxx| 国产亚洲视频中文字幕视频| 国产精品自产拍高潮在线观看| 91视频国产一区| 精品一区二区三区四区| 久久影视电视剧凤归四时歌| 色视频www在线播放国产成人| 精品亚洲一区二区三区四区五区| 日韩中文字幕精品视频| 日韩毛片在线观看| 日韩久久免费视频| 日本免费一区二区三区视频观看| 亚洲精品一区av在线播放| 91精品国产91久久久久| 91精品国产色综合久久不卡98| 九九热这里只有精品免费看| 欧美国产日韩一区二区在线观看| 国产精品久久久久久久久久东京| 欧美激情一级欧美精品| 亚洲毛片一区二区| 亚洲第一网站免费视频| 国产成人免费av电影| 亚洲精品影视在线观看| 亚洲欧美资源在线| 日韩中文字幕免费视频| 久久精品在线播放| 欧美精品久久一区二区| 在线播放国产一区二区三区| 欧美日韩亚洲成人| 成人免费自拍视频| 亚洲精品国偷自产在线99热| 欧美黑人一区二区三区| 亚洲一区免费网站| 尤物yw午夜国产精品视频明星| 日韩欧美999| 精品国产福利视频| 亚洲成年人在线播放| 亚洲欧美日韩国产中文| 粉嫩老牛aⅴ一区二区三区| 91免费在线视频| 狠狠干狠狠久久| 国产欧美日韩精品丝袜高跟鞋| 在线视频中文亚洲| 91精品国产色综合久久不卡98口| 九九久久精品一区| 色综合天天综合网国产成人网| 欧美视频不卡中文| www.亚洲成人| 久久久精品久久| 中文字幕亚洲一区在线观看| 亚洲国产精彩中文乱码av在线播放| 久久亚洲综合国产精品99麻豆精品福利| 少妇高潮久久77777| 久久久久久美女| 欧美大片在线免费观看| 亚洲人在线观看| 在线日韩av观看| 欧美日韩国产一区在线| 日本国产欧美一区二区三区| 国产精品国产亚洲伊人久久| 亚州精品天堂中文字幕| 在线观看国产精品淫| 91精品久久久久久久久久| 国产精品午夜国产小视频| 国产女人精品视频| 亚洲人成网7777777国产| 国模叶桐国产精品一区| 91视频免费网站| 九九久久久久99精品| 欧美午夜性色大片在线观看| 色噜噜亚洲精品中文字幕| 欧美精品电影在线| 在线精品高清中文字幕| 97不卡在线视频| 亚洲一二三在线| 国产在线高清精品| 亚洲国产欧美精品| 成人国产精品免费视频| 亚洲国产精品女人久久久| 午夜精品一区二区三区在线播放| 日韩精品亚洲精品| 国内精品久久久| 日韩一区二区三区xxxx| 日韩av电影在线免费播放| 影音先锋日韩有码| 国产精品aaaa| 欧洲永久精品大片ww免费漫画| 成人免费午夜电影| 不用播放器成人网| 国产福利视频一区二区|