成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript中的this

warnerwu / 2020人閱讀

摘要:中的是語(yǔ)言中的一個(gè)關(guān)鍵字它是函數(shù)運(yùn)行時(shí),在函數(shù)體內(nèi)部自動(dòng)生成的一個(gè)對(duì)象,只能在函數(shù)體內(nèi)部使用。情況一純粹的函數(shù)調(diào)用這是函數(shù)的最常通用法,屬于全局性調(diào)用,因此就代表全局對(duì)象。因此,這時(shí)運(yùn)行結(jié)果為,證明指的是全局對(duì)象。

JS JavaScript中的this
thisJavaScript語(yǔ)言中的一個(gè)關(guān)鍵字
它是函數(shù)運(yùn)行時(shí),在函數(shù)體內(nèi)部自動(dòng)生成的一個(gè)對(duì)象,只能在函數(shù)體內(nèi)部使用。
function test() {
 this.x = 1;
}

那么,this的值是什么呢?
函數(shù)在不同使用場(chǎng)合,this有不同的值??傊?b>this就是函數(shù)運(yùn)行時(shí)所在的環(huán)境對(duì)象。

情況一:純粹的函數(shù)調(diào)用
這是函數(shù)的最常通用法,屬于全局性調(diào)用,因此this就代表全局對(duì)象。
var x = 1;
function test() {
   console.log(this.x);
}
test();  // 1
情況二:作為對(duì)象的方法調(diào)用
函數(shù)還可以作為某個(gè)對(duì)象的方法調(diào)用,這時(shí)this就指這個(gè)上級(jí)對(duì)象
function test() {
  console.log(this.x);
}

var obj = {};
obj.x = 1;
obj.m = test;

obj.m(); // 1
情況三:作為構(gòu)造函數(shù)調(diào)用
構(gòu)造函數(shù)就是通過(guò)這個(gè)函數(shù)可以生成一個(gè)新對(duì)象。這時(shí),this就指這個(gè)新對(duì)象
function test() {
 this.x = 1;
}

var obj = new test();
obj.x // 1

為了表明這時(shí)this不是全局對(duì)象,下面代碼:

var x = 2;
function test() {
  this.x = 1;
}

var obj = new test();
x  // 2

運(yùn)行結(jié)果為2,表明全局變量x的值沒(méi)有變化

情況四:apply調(diào)用
apply()是函數(shù)的一個(gè)方法,作用是改變函數(shù)的調(diào)用對(duì)象。它的第一個(gè)參數(shù)就表示改變后的調(diào)用這個(gè)函數(shù)的對(duì)象。因此,這時(shí)this指的就是這個(gè)參數(shù)。
var x = 0;
function test() {
 console.log(this.x);
}

var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply() // 0

apply()的參數(shù)為空時(shí),默認(rèn)調(diào)用全局變量。因此,這時(shí)運(yùn)行結(jié)果為0,證明this指的是全局對(duì)象。
如果把最后一行代碼修改成

obj.m.apply(obj); //1

運(yùn)行結(jié)果就變成1,證明這時(shí)this代表的對(duì)象是obj

改變this的指向有以下幾種方法

使用ES6的箭頭函數(shù)

在函數(shù)內(nèi)部_this=this

使用applycall、bind

new實(shí)例化一個(gè)對(duì)象

其實(shí)this的指向,始終堅(jiān)持一個(gè)原理:this永遠(yuǎn)指向最后調(diào)用它的那個(gè)對(duì)象。
例1:
var name = "windowsName";
function a() {
   var name = "Cherry";

   console.log(this.name);          // windowsName

   console.log("inner:" + this);    // inner: Window
}
 a();
 console.log("outer:" + this)         // outer: Window

這里我們使用嚴(yán)格模式,如果使用嚴(yán)格模式的話,全局對(duì)象就是 undefined,那么就會(huì)報(bào)錯(cuò) Uncaught TypeError: Cannot read property "name" of undefined。

例2:
    var name = "windowsName";
    var a = {
        name: "Cherry",
        fn : function () {
            console.log(this.name);      // Cherry
        }
    }
    a.fn();
例3:
var name = "windowsName";
var a = {
    name: "Cherry",
    fn : function () {
        console.log(this.name);      // Cherry
     }
  }
window.a.fn();
例4:
    var name = "windowsName";
    var a = {
        // name: "Cherry",
        fn : function () {
            console.log(this.name);      // undefined
        }
    }
    window.a.fn();
例5:
    var name = "windowsName";
    var a = {
        name : null,
        // name: "Cherry",
        fn : function () {
            console.log(this.name);      // windowsName
        }
    }

    var f = a.fn;
    f();

為什么不是 Cherry,這是因?yàn)殡m然將 a 對(duì)象的 fn 方法賦值給變量 f 了,“this 永遠(yuǎn)指向最后調(diào)用它的那個(gè)對(duì)象”,由于剛剛的 f 并沒(méi)有調(diào)用,所以 fn() 最后仍然是被 window 調(diào)用的。所以 this 指向的也就是 window。

例6:

    var name = "windowsName";

    function fn() {
        var name = "Cherry";
        innerFunction();
        function innerFunction() {
            console.log(this.name);      // windowsName
        }
    }

    fn()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101264.html

相關(guān)文章

  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)?lái)幫助....(據(jù)說(shuō)是阿里的前端妹子寫的) this 的值到底...

    blair 評(píng)論0 收藏0
  • 學(xué)習(xí)React之前你需要知道的的JavaScript基礎(chǔ)知識(shí)

    摘要:和類在開始時(shí)遇到類組件,只是需要有關(guān)類的基礎(chǔ)。畢竟,中的條件呈現(xiàn)僅再次顯示大多數(shù)是而不是特定的任何內(nèi)容。 在我的研討會(huì)期間,更多的材料是關(guān)于JavaScript而不是React。其中大部分歸結(jié)為JavaScript ES6以及功能和語(yǔ)法,但也包括三元運(yùn)算符,語(yǔ)言中的簡(jiǎn)寫版本,此對(duì)象,JavaScript內(nèi)置函數(shù)(map,reduce,filter)或更常識(shí)性的概念,如:可組合性,可重用...

    bitkylin 評(píng)論0 收藏0
  • JavaScript中的面向?qū)ο螅╫bject-oriented)編程

    摘要:對(duì)象在中,除了數(shù)字字符串布爾值這幾個(gè)簡(jiǎn)單類型外,其他的都是對(duì)象。那么在函數(shù)對(duì)象中,這兩個(gè)屬性的有什么區(qū)別呢表示該函數(shù)對(duì)象的原型表示使用來(lái)執(zhí)行該函數(shù)時(shí)這種函數(shù)一般成為構(gòu)造函數(shù),后面會(huì)講解,新創(chuàng)建的對(duì)象的原型。這時(shí)的函數(shù)通常稱為構(gòu)造函數(shù)。。 本文原發(fā)于我的個(gè)人博客,經(jīng)多次修改后發(fā)到sf上。本文仍在不斷修改中,最新版請(qǐng)?jiān)L問(wèn)個(gè)人博客。 最近工作一直在用nodejs做開發(fā),有了nodejs,...

    JerryZou 評(píng)論0 收藏0
  • JavaScript進(jìn)階之’this

    摘要:所以相同點(diǎn)是,在全局范圍內(nèi),全局變量終究是屬于老大的。只生效一次引入了。只生效一次在箭頭函數(shù)中,與封閉詞法環(huán)境的保持一致。我通常把這些原始函數(shù)叫做構(gòu)造函數(shù)。在里面你可以嵌套函數(shù),也就是你可以在函數(shù)里面定義函數(shù)。 showImg(https://img-blog.csdnimg.cn/20190522000008399.jpg?x-oss-process=image/watermark,...

    shenhualong 評(píng)論0 收藏0
  • 理解 JavaScript 中的 this 關(guān)鍵字

    摘要:原文許多人被中的關(guān)鍵字給困擾住了,我想混亂的根源來(lái)自人們理所當(dāng)然地認(rèn)為中的應(yīng)該像中的或中的一樣工作。盡管有點(diǎn)難理解,但它的原理并不神秘。在瀏覽器中,全局對(duì)象是對(duì)象。運(yùn)算符創(chuàng)建一個(gè)新對(duì)象并且設(shè)置函數(shù)中的指向調(diào)用函數(shù)的新對(duì)象。 原文:Understanding the this keyword in JavaScript 許多人被JavaScript中的this關(guān)鍵字給困擾住了,我想混亂的...

    jayzou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<