最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年04月13日 09:10:35   作者:906144643@qq.com  
由于其運(yùn)行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對象、當(dāng)前對象或者任意對象,這完全取決于函數(shù)的調(diào)用方式,這篇文章主要給大家介紹了JavaScript中this的用法及this在不同應(yīng)用場景的作用解析,一起看看吧

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

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

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

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

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

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

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

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

var myObject = {
  value :0,
  increment:function (inc){
    this.value += typeof inc ==='number' ? inc:1;
  }
};
myObject.increment();
console.log(myObject.value); //1
myObject.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)建的對象上。

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

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

為了表明這時this不是全局對象,我對代碼做一些改變:

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)用

讓我們再一次重申,在 JavaScript 中函數(shù)也是對象,對象則有方法,apply 和 call 就是函數(shù)對象的方法。這兩個方法異常強(qiáng)大,他們允許切換函數(shù)執(zhí)行的上下文環(huán)境(context),即 this 綁定的對象。很多 JavaScript 中的技巧以及類庫都用到了該方法。讓我們看一個具體的例子:

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,1
p1.moveTo.apply(p2, [10, 10]);//10,10

在上面的例子中,我們使用構(gòu)造函數(shù)生成了一個對象 p1,該對象同時具有 moveTo 方法;使用對象字面量創(chuàng)建了另一個對象 p2,我們看到使用 apply 可以將 p1 的方法應(yīng)用到 p2 上,這時候 this 也被綁定到對象 p2 上。另一個方法 call 也具備同樣功能,不同的是最后的參數(shù)不是作為一個數(shù)組統(tǒng)一傳入,而是分開傳入的。本文通過對JavaScript中經(jīng)常容易混淆的this在四中應(yīng)用場景中的使用方法進(jìn)行了講解,希望對您有所幫助,喜歡的話,請推薦一下哦。

以上所述是小編給大家介紹的JavaScript中this的用法及this在不同應(yīng)用場景的作用解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JS 使用for循環(huán)遍歷子節(jié)點(diǎn)查找元素

    JS 使用for循環(huán)遍歷子節(jié)點(diǎn)查找元素

    這篇文章主要介紹了JS 使用for循環(huán)配合數(shù)組遍歷子節(jié)點(diǎn)查找元素,經(jīng)測試,效果不錯,需要的朋友可以看看
    2014-09-09
  • 調(diào)用jQuery滑出效果時閃爍的解決方法

    調(diào)用jQuery滑出效果時閃爍的解決方法

    這篇文章主要介紹了在調(diào)用jQuery 滑出效果時,層會現(xiàn)次閃爍一下的解決方法,需要的朋友可以參考下
    2014-03-03
  • 你必須知道的Javascript知識點(diǎn)之"單線程事件驅(qū)動"的使用

    你必須知道的Javascript知識點(diǎn)之"單線程事件驅(qū)動"的使用

    本篇文章小編為大家介紹,你必須知道的Javascript知識點(diǎn)之"單線程事件驅(qū)動"的使用。需要的朋友參考下
    2013-04-04
  • JS前端首屏優(yōu)化技巧

    JS前端首屏優(yōu)化技巧

    這篇文章主要為大家介紹了JS前端首屏優(yōu)化技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Bootstrap柵格系統(tǒng)簡單實(shí)現(xiàn)代碼

    Bootstrap柵格系統(tǒng)簡單實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Boostrap柵格系統(tǒng)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JavaScript每天必學(xué)之事件

    JavaScript每天必學(xué)之事件

    JavaScript每天必學(xué)之事件,聊一聊事件冒泡與捕獲、事件冒泡的好處,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Three.js?PBR物理渲染屬性及使用介紹

    Three.js?PBR物理渲染屬性及使用介紹

    這篇文章主要為大家介紹了Three.js?PBR物理渲染屬性及使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 詳解微信小程序獲取當(dāng)前時間及日期的方法

    詳解微信小程序獲取當(dāng)前時間及日期的方法

    這篇文章主要介紹了微信小程序獲取當(dāng)前時間及日期的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Bootstrap CSS布局之列表

    Bootstrap CSS布局之列表

    這篇文章主要為大家詳細(xì)介紹了Bootstrap CSS布局之列表的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JS中去掉if...else的多種方法

    JS中去掉if...else的多種方法

    在JavaScript編程中,過多的if...elseif...else語句可能導(dǎo)致代碼難以維護(hù),可以通過switch語句、對象字面量、函數(shù)映射、數(shù)組或映射對象分發(fā)、提前返回以及使用數(shù)組的find方法來優(yōu)化這種復(fù)雜的條件判斷,提高代碼的可讀性和維護(hù)性,下面就來介紹一下
    2024-09-09

最新評論

曲靖市| 宜兰市| 鹤岗市| 上杭县| 雷州市| 左权县| 兰溪市| 黔江区| 茂名市| 正宁县| 石嘴山市| 武城县| 南华县| 垫江县| 潍坊市| 沁源县| 定日县| 青神县| 林口县| 丁青县| 瑞昌市| 朝阳市| 思南县| 漳平市| 庄浪县| 九寨沟县| 西华县| 平陆县| 遂溪县| 台中市| 黔西县| 奉化市| 吐鲁番市| 连城县| 琼海市| 长春市| 永修县| 黎平县| 昭苏县| 木兰县| 启东市|