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

資訊專欄INFORMATION COLUMN

Javascript 深入淺出This

Y3G / 756人閱讀

摘要:中函數(shù)的調(diào)用有以下幾種方式作為對(duì)象方法調(diào)用,作為函數(shù)調(diào)用,作為構(gòu)造函數(shù)調(diào)用,和使用或調(diào)用。作為構(gòu)造函數(shù)調(diào)用中的構(gòu)造函數(shù)也很特殊,構(gòu)造函數(shù),其實(shí)就是通過(guò)這個(gè)函數(shù)生成一個(gè)新對(duì)象,這時(shí)候的就會(huì)指向這個(gè)新對(duì)象如果不使用調(diào)用,則和普通函數(shù)一樣。

this 是 JavaScript 比較特殊的關(guān)鍵字,本文將深入淺出的分析其在不同情況下的含義,可以這樣說(shuō),正確掌握了 JavaScript 中的 this 關(guān)鍵字,才算邁入了 JavaScript 這門語(yǔ)言的門檻。

Tips:個(gè)人博客:https://haonancx.github.io;排版更佳~

What ’s this?

要學(xué)一樣?xùn)|西,首先得了解它的含義,this 關(guān)鍵字的含義是明確且具體的,即指代當(dāng)前對(duì)象;細(xì)心的童鞋發(fā)現(xiàn)了 當(dāng)前對(duì)象 中"當(dāng)前" 這兩個(gè)字;說(shuō)明這個(gè) this 是在某種相對(duì)情況下才成立的。

由于其運(yùn)行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式。JavaScript 中函數(shù)的調(diào)用有以下幾種方式:作為對(duì)象方法調(diào)用,作為函數(shù)調(diào)用,作為構(gòu)造函數(shù)調(diào)用,和使用 apply 或 call 調(diào)用。下面我們將按照調(diào)用方式的不同,分別討論 this 的含義。

This 被分為三種情況:全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象;判斷處于那種情況,這完全取決于函數(shù)的調(diào)用方式,JavaScript 中函數(shù)的調(diào)用有以下幾種方式:

作為函數(shù)調(diào)用

作為對(duì)象方法調(diào)用

作為構(gòu)造函數(shù)調(diào)用

使用 apply 或 call 調(diào)用

這他娘的太可怕了,我要問(wèn)的是 This 到底是什么鬼,你好家伙,給我羅列那么多,要暈了!!!

別急,咱一個(gè)蘿卜一個(gè)坑,帶你入坑以后,你就恍然大悟了。

作為函數(shù)調(diào)用
這是我們最常用的方法,這種調(diào)用方式屬于全局調(diào)用,所以呢,這里的 This 就理所應(yīng)當(dāng)?shù)某闪巳謱?duì)象。(全局對(duì)象??難道它是一輛 "公交車"?)

廢話少說(shuō),上個(gè)菜!!!

{% highlight ruby %}

  function example(){

    this.n = "hello world !";

    console.log(this.n);
       console.log(this);

  }

  example(); // hello world !   Window

{% endhighlight %}

很顯然,調(diào)用 example(); 時(shí),輸出了 "hello world !" 還有 Window;這時(shí)候說(shuō)它是全局對(duì)象好像不具備什么說(shuō)服力;咱換個(gè)姿勢(shì)。

{% highlight ruby %}

  var n = "hello world !";

  function example(){

   console.log(this.n);

  }

   example(); // hello world !

{% endhighlight %}

你瞧,又是 " hello world ! ",不急,咱有一千種姿勢(shì)等你來(lái)解鎖;再換。

{% highlight ruby %}

  var n = "hello world !";

  function example(){

    this.n = 0;

  }

 example();

 console.log(n); // 0 !

{% endhighlight %}

果然是一輛 "公交車" !!!

作為對(duì)象方法調(diào)用
上述例子中,普通函數(shù)的調(diào)用把 This 作為window對(duì)象的方法進(jìn)行了調(diào)用。顯然 This 指向了 Window 對(duì)象;咱換個(gè)口味,看看下面的菜。

{% highlight ruby %}

var name="Akita";
var dogs={
    name:"Collie",
    showName:function(){
        console.log(this.name);
    }
}

dogs.showName();  //輸出  Collie

var otherName=dogs.showName;

otherName();    //輸出  Akita

{% endhighlight %}

快來(lái)看,當(dāng)執(zhí)行 dogs.showName(); 時(shí),輸出 Collie (牧羊犬),說(shuō)明這個(gè)時(shí)候的 This 是指向 dogs 這個(gè)對(duì)象的;

而當(dāng)我們嘗試把 dogs.showName 賦給 otherName 時(shí),我們回頭想想這個(gè) showName() 是做什么用的,很顯然,輸出它函數(shù)的執(zhí)行環(huán)境所指向?qū)ο蟮?name,而此時(shí) otherName 變量相當(dāng)于 Window 對(duì)象的一個(gè)屬性,因此 otherName() 執(zhí)行的時(shí)候相當(dāng)于 window.otherName(),即 window 對(duì)象調(diào)用 otherName 這個(gè)方法,所以 this 關(guān)鍵字指向 window;所以就會(huì)輸出 Akita(秋田犬)。

作為構(gòu)造函數(shù)調(diào)用
JavaScript 中的構(gòu)造函數(shù)也很特殊,構(gòu)造函數(shù),其實(shí)就是通過(guò)這個(gè)函數(shù)生成一個(gè)新對(duì)象(object),這時(shí)候的 This 就會(huì)指向這個(gè)新對(duì)象;如果不使用 new 調(diào)用,則和普通函數(shù)一樣。

{% highlight ruby %}

  function example(){

    this.n = "hello world !";

  }

  var other = new example();

  console.log(other.n); //hello world !

{% endhighlight %}

快來(lái)看,我們?yōu)?example 這個(gè)函數(shù) new(構(gòu)造)了一個(gè)新的對(duì)象 other,那么 this 就會(huì)指向 other 這個(gè)對(duì)象,所以就會(huì)輸出 "hello world !"。

使用 apply 或 call 調(diào)用
apply()是函數(shù)對(duì)象的一個(gè)方法,它應(yīng)用某一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象。

{% highlight ruby %}

   var n = "hello world!";
  function example(){
    console.log(this.n);
  }
  var o={};
  o.n = "hey~";
  o.m = example;
  o.m.apply();//hello world!

{% endhighlight %}

來(lái)看看這行代碼,當(dāng)apply()的參數(shù)為空時(shí),就是沒(méi)有對(duì)象去替換掉當(dāng)前的對(duì)象,所以默認(rèn)調(diào)用全局對(duì)象。因此,這時(shí)會(huì)輸出"hello world!",證明this指的是全局對(duì)象。

那么試試給apply()指定一個(gè)對(duì)象。

{% highlight ruby %}

   var n = "hello world!";
  function example(){
    console.log(this.n);
  }
  var o={};
  o.n = "hey~";
  o.m = example;
  o.m.apply(o);//hey~

{% endhighlight %}

此時(shí)輸出了"hey~",說(shuō)明對(duì)象替換成功,this 指向了 o 這個(gè)對(duì)象。

本文介紹了 JavaScript 中的 this 關(guān)鍵字在各種情況下的含義,雖然這只是 JavaScript 中一個(gè)很小的概念,但借此我們可以深入了解 JavaScript 中函數(shù)的執(zhí)行環(huán)境,才能充分發(fā)揮 JavaScript 的特點(diǎn),才會(huì)發(fā)現(xiàn) JavaScript 語(yǔ)言特性的強(qiáng)大。 該文章部分知識(shí)網(wǎng)絡(luò)整理

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91288.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
  • JavaScript深入淺出第1課:箭頭函數(shù)中的this究竟是什么鬼?

    摘要:箭頭函數(shù)沒(méi)有自己的值,箭頭函數(shù)中所使用的來(lái)自于函數(shù)作用域鏈。使用箭頭函數(shù)打印對(duì)于內(nèi)層函數(shù),它本身并沒(méi)有值,其使用的來(lái)自作用域鏈,來(lái)自更高層函數(shù)的作用域。 《JavaScript 深入淺出》系列: JavaScript 深入淺出第 1 課:箭頭函數(shù)中的 this 究竟是什么鬼? JavaScript 深入淺出第 2 課:函數(shù)是一等公民是什么意思呢? 普通函數(shù)與箭頭函數(shù) 普通函數(shù)指的是...

    MRZYD 評(píng)論0 收藏0
  • JavaScript深入之bind的模擬實(shí)現(xiàn)

    摘要:也就是說(shuō)當(dāng)返回的函數(shù)作為構(gòu)造函數(shù)的時(shí)候,時(shí)指定的值會(huì)失效,但傳入的參數(shù)依然生效。構(gòu)造函數(shù)效果的優(yōu)化實(shí)現(xiàn)但是在這個(gè)寫法中,我們直接將,我們直接修改的時(shí)候,也會(huì)直接修改函數(shù)的。 JavaScript深入系列第十一篇,通過(guò)bind函數(shù)的模擬實(shí)現(xiàn),帶大家真正了解bind的特性 bind 一句話介紹 bind: bind() 方法會(huì)創(chuàng)建一個(gè)新函數(shù)。當(dāng)這個(gè)新函數(shù)被調(diào)用時(shí),bind() 的第一個(gè)參數(shù)...

    FingerLiu 評(píng)論0 收藏0
  • JavaScript深入之執(zhí)行上下文

    摘要:深入系列第七篇,結(jié)合之前所講的四篇文章,以權(quán)威指南的為例,具體講解當(dāng)函數(shù)執(zhí)行的時(shí)候,執(zhí)行上下文棧變量對(duì)象作用域鏈?zhǔn)侨绾巫兓摹G把栽谏钊胫畧?zhí)行上下文棧中講到,當(dāng)代碼執(zhí)行一段可執(zhí)行代碼時(shí),會(huì)創(chuàng)建對(duì)應(yīng)的執(zhí)行上下文。 JavaScript深入系列第七篇,結(jié)合之前所講的四篇文章,以權(quán)威指南的demo為例,具體講解當(dāng)函數(shù)執(zhí)行的時(shí)候,執(zhí)行上下文棧、變量對(duì)象、作用域鏈?zhǔn)侨绾巫兓摹?前言 在《Jav...

    gougoujiang 評(píng)論0 收藏0
  • JavaScript深入之new的模擬實(shí)現(xiàn)

    摘要:深入系列第十二篇,通過(guò)的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用獲得構(gòu)造函數(shù)實(shí)例的真相一句話介紹運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類型之一也許有點(diǎn)難懂,我們?cè)谀M之前,先看看實(shí)現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過(guò)new的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用new獲得構(gòu)造函數(shù)實(shí)例的真相 new 一句話介紹 new: new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具...

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

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

0條評(píng)論

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