国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解JavaScript中的this

genedna / 2261人閱讀

摘要:別的文章一來(lái)就舉例子,我這里首先告訴大家一個(gè)結(jié)論指向的是調(diào)用函數(shù)的那個(gè)對(duì)象。這里依然是之前的例子中的俗稱箭頭函數(shù),使用它來(lái)定義匿名函數(shù),同樣可以解決的綁定問(wèn)題這是由于函數(shù)體內(nèi)的就是定義時(shí)所在的對(duì)象,而不是執(zhí)行時(shí)所在的對(duì)象。

一、結(jié)論在前

javascript中的this是一個(gè)老生常談的話題,但不知道是之前那些作者沒(méi)講清楚還是我太笨沒(méi)能理解,始終沒(méi)能真正理解它,隨著自己在項(xiàng)目過(guò)程中的大量實(shí)踐,終于對(duì)this比較理解,這里作個(gè)總結(jié),也與大家分享一下。

別的文章一來(lái)就舉例子,我這里首先告訴大家一個(gè)結(jié)論:

this指向的是調(diào)用函數(shù)的那個(gè)對(duì)象。

要是覺(jué)得理解了就可以不用看后面的文章了:)

二、經(jīng)典栗子
var name = "The Window";
var object = {
    name: "My Object",
    getName: function() {
        return this.name
    }
};
alert(object.getName());

這是一個(gè)所有講this都會(huì)使用的簡(jiǎn)單而又經(jīng)典的例子,我們根據(jù)一開(kāi)始的結(jié)論----this指向的是調(diào)用函數(shù)的那個(gè)對(duì)象,很容易就知道輸出結(jié)果是My Object,接下來(lái)我們將這個(gè)經(jīng)典例子升級(jí)。

var name = "The Window";
var object = {
    name: "My Object",
    getName: function() {
        return function () {
            return this.name
        }

    }
};
alert(object.getName()());

請(qǐng)告訴我輸出結(jié)果是什么。

許多人會(huì)說(shuō)還是My Object,那么你就進(jìn)入陷阱了。其實(shí)這也是JS新手常有的誤區(qū),他們總簡(jiǎn)單地以為this指向this所在的對(duì)象,這是錯(cuò)誤的!一定要牢記結(jié)論this指向的是調(diào)用函數(shù)的那個(gè)對(duì)象,這個(gè)重要的結(jié)論我終于說(shuō)滿三遍。那么我們?cè)賮?lái)分析上面的代碼:

首先我們創(chuàng)建了一個(gè)全局變量name,為它賦值"The Window";接下來(lái)我們創(chuàng)建了對(duì)象object,它有個(gè)屬性name,屬性值"My Object",這個(gè)對(duì)象還包含一個(gè)方法getName(),而這個(gè)方法會(huì)返回一個(gè)匿名函數(shù),而匿名函數(shù)又返回this.name。

邏輯理清后,我來(lái)告訴大家陷阱在哪:

匿名函數(shù)執(zhí)行具有全局性,其this對(duì)象通常會(huì)指向window

說(shuō)"通常"就是說(shuō)有例外,在通過(guò)call()apply()改變函數(shù)執(zhí)行環(huán)境的情況下,this就會(huì)指向其他對(duì)象了,這些函數(shù)我之后會(huì)講到,這里不做展開(kāi)。

ok,我們知道了這個(gè)陷阱,但這也只是個(gè)沒(méi)用的知識(shí)點(diǎn),有用的是怎么解決這種尷尬的情況。雖然我之前說(shuō)很多新手會(huì)犯總簡(jiǎn)單地以為this指向this所在的對(duì)象這樣的錯(cuò)誤,但是我們?cè)趯?shí)際開(kāi)發(fā)中就是想讓this有這樣的效果,那么我們?cè)撛趺醋瞿兀?/p> 三、this的綁定 1.var _this=this

這是最基礎(chǔ)的綁定this的方式,將this賦值給一個(gè)變量,這個(gè)變量可以取任何名字,我喜歡取名_this,有些人喜歡取名that,我們?cè)倩仡欀吧?jí)的例子:

var name = "The Window";
var object = {
    name: "My Object",
    getName: function() {
        var _this=this
        return function () {
            return _this.name
        }

    }
};
alert(object.getName()());
2.bind()

稍微高級(jí)點(diǎn)的方法是使用bind()函數(shù),這是一個(gè)ECMAScript 5.1出來(lái)的擴(kuò)展方法,與call()、apply()是"同期生",他們的關(guān)系和差別之后我會(huì)專門談。這里依然是之前的例子:

var name = "The Window";
var object = {
    name: "My Object",
    getName: function() {
        return function () {
            return this.name
        }.bind(this)
    }
};
alert(object.getName()());
3.ES6中的()=>

()=>俗稱箭頭函數(shù),使用它來(lái)定義匿名函數(shù),同樣可以解決this的綁定問(wèn)題

var name = "The Window";
var object = {
    name: "My Object",
    getName: function() {
        return ()=> {
            return this.name
        }
    }
};
alert(object.getName()());

這是由于()=>函數(shù)體內(nèi)的this就是定義時(shí)所在的對(duì)象,而不是執(zhí)行時(shí)所在的對(duì)象。

以上,想到再補(bǔ)充吧...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91116.html

相關(guān)文章

  • 理解 JavaScript this

    摘要:回調(diào)函數(shù)在回調(diào)函數(shù)中的指向也會(huì)發(fā)生變化。在閉包回調(diào)函數(shù)賦值等場(chǎng)景下我們都可以利用來(lái)改變的指向,以達(dá)到我們的預(yù)期。文章參考系列文章理解閉包理解執(zhí)行棧理解作用域理解數(shù)據(jù)類型與變量原文發(fā)布在我的公眾號(hào),點(diǎn)擊查看。 這是本系列的第 5 篇文章。 還記得上一篇文章中的閉包嗎?點(diǎn)擊查看文章 理解 JavaScript 閉包 。 在聊 this 之前,先來(lái)復(fù)習(xí)一下閉包: var name = Nei...

    zombieda 評(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
  • 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
  • 我對(duì)JavaScriptthis的一些理解

    摘要:匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此它的對(duì)象通常指向。如果對(duì)此有疑惑,可以看知乎上的答案知乎匿名函數(shù)的指向?yàn)槭裁词亲鳛閷?duì)象方法的調(diào)用,指向該對(duì)象當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),就指這個(gè)函數(shù)所在的對(duì)象。 因?yàn)槿粘9ぷ髦薪?jīng)常使用到this,而且在JavaScript中this的指向問(wèn)題也很容易讓人混淆一部分知識(shí)。 這段時(shí)間翻閱了一些書籍也查閱了網(wǎng)上一些資料然后結(jié)合自己的經(jīng)驗(yàn),為了能讓自...

    focusj 評(píng)論0 收藏0
  • 理解 JavaScript call()/apply()/bind()

    摘要:理解文章中已經(jīng)比較全面的分析了在中的指向問(wèn)題,用一句話來(lái)總結(jié)就是的指向一定是在執(zhí)行時(shí)決定的,指向被調(diào)用函數(shù)的對(duì)象。與和直接執(zhí)行原函數(shù)不同的是,返回的是一個(gè)新函數(shù)。這個(gè)新函數(shù)包裹了原函數(shù),并且綁定了的指向?yàn)閭魅氲摹? 理解 JavaScript this 文章中已經(jīng)比較全面的分析了 this 在 JavaScript 中的指向問(wèn)題,用一句話來(lái)總結(jié)就是:this 的指向一定是在執(zhí)行時(shí)決定的,...

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

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

0條評(píng)論

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