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

資訊專欄INFORMATION COLUMN

this指向

xiongzenghui / 3548人閱讀

摘要:情況如果一個函數(shù)中有,這個函數(shù)有被上一級的對象所調(diào)用,那么指向的就是上一級的對象。

首先必須要說的是,this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this的指向的是最終調(diào)用它的對象。

函數(shù)調(diào)用模式

例子1

function a(){
    var user = "username";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();

按照我們上面說的this最終指向的是調(diào)用它的對象,這里的函數(shù)a實際是被Window對象所點出來的,下面的代碼就可以證明。

function a(){
    var user = "username";
    console.log(this.user); //undefined
    console.log(this);  //Window
}
window.a();

例子2

var o = {
    user:"username",
    fn:function(){
        console.log(this.user);  //username
    }
}
o.fn();

這里的this指向的是對象o,因為你調(diào)用這個fn是通過o.fn()執(zhí)行的,那自然指向就是對象o,這里再次強調(diào)一點,this的指向在函數(shù)創(chuàng)建的時候是決定不了的,在調(diào)用的時候才能決定,誰調(diào)用的就指向誰,一定要搞清楚這個。

例子3

var o = {
    user:"username",
    fn:function(){
        console.log(this.user); //username
    }
}
window.o.fn();

這段代碼和上面的那段代碼幾乎是一樣的,但是這里的this為什么不是指向window,如果按照上面的理論,最終this指向的是調(diào)用它的對象。這里先不解釋為什么上面的那段代碼this沒有指向window,我們再來看一段代碼。

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //12
        }
    }
}
o.b.fn();

這里同樣也是對象o點出來的,但是同樣this并沒有執(zhí)行它,那你肯定會說我一開始說的那些不就都是錯誤的嗎?其實也不是,只是一開始說的不準確,接下來我將補充一句話,我相信你就可以徹底的理解this的指向的問題。

情況1:如果一個函數(shù)中有this,但是它沒有被上一級的對象所調(diào)用,那么this指向的就是window。

情況2:如果一個函數(shù)中有this,這個函數(shù)有被上一級的對象所調(diào)用,那么this指向的就是上一級的對象。

情況3:如果一個函數(shù)中有this,這個函數(shù)中包含多個對象,盡管這個函數(shù)是被最外層的對象所調(diào)用,this指向的也只是它上一級的對象,例子3可以證明,如果不相信,那么接下來我們繼續(xù)看幾個例子。

var o = {
    a:10,
    b:{
        // a:12,
        fn:function(){
            console.log(this.a); //undefined
        }
    }
}
o.b.fn();

盡管對象b中沒有屬性a,這個this指向的也是對象b,因為this只會指向它的上一級對象,不管這個對象中有沒有this要的東西。

例子4

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;
j();

這里this指向的是window,是不是有些蒙了?其實是因為你沒有理解一句話,這句話同樣至關(guān)重要。

this永遠指向的是最后調(diào)用它的對象,也就是看它執(zhí)行的時候是誰調(diào)用的,例子4中雖然函數(shù)fn是被對象b所引用,但是在將fn賦值給變量j的時候并沒有執(zhí)行所以最終指向的是window,這和例子3是不一樣的,例子3是直接執(zhí)行了fn。

構(gòu)造器調(diào)用模式
function Fn(){
    this.user = "username";
}
var a = new Fn();
console.log(a.user); //username

這里之所以對象a可以點出函數(shù)Fn里面的user是因為new關(guān)鍵字,使用new關(guān)鍵字發(fā)生了什么事?

1) 函數(shù)在執(zhí)行前,會創(chuàng)建一個空對象
2) 把this指向這個新創(chuàng)建的空對象
3) 執(zhí)行函數(shù)里面的所有語句
4) 執(zhí)行完畢最后一條語句之后,會把創(chuàng)建的這個對象返回。

return

● 如果構(gòu)造函數(shù)顯式地return了一個基本類型,那么return語句會被無視。return的仍然是原先的對象。
● 如果return一個引用類型值,那么return的東西就是函數(shù)返回的東西,我們創(chuàng)建的新對象不會被返回。

function fn()  
{  
    this.user = "username";  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = "username";  
    return 1;
}
var a = new fn;  
console.log(a.user); //username

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

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

相關(guān)文章

  • JavaScript中的this指向總結(jié)

    摘要:其中和在傳入要綁定的指向時,立即執(zhí)行。需要注意的是,當使用改變函數(shù)內(nèi)部的指向時如果傳入的不是一個對象,會調(diào)用相對的構(gòu)造函數(shù),進行隱式類型裝換。 關(guān)于javascript中this指向的總結(jié) 瀏覽器環(huán)境 在全局作用域中,this的指向是window對象 console.log(this); //Window對象 console.log(this === window); //true E...

    lavnFan 評論0 收藏0
  • Javascript中this基礎(chǔ)應(yīng)用

    摘要:不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對象通常指向。示例如下依然指向全局全局方法指向匿名函數(shù)目前為止,一切都符合預(yù)期表現(xiàn)。指向指向全局調(diào)用對象方法調(diào)用方法內(nèi)部方法雖然有點繞,但是還是可以明白的,指向調(diào)用方法該對象,匿名函數(shù)指向全局。 前言 以下內(nèi)容只針對非嚴格模式,嚴格模式區(qū)不說了如果看過《JavaScript高級程序設(shè)計(第3版)》的人都應(yīng)該有印象,里面關(guān)于this對象是這么形容...

    NicolasHe 評論0 收藏0
  • ES5 call,apply,bind方法總結(jié)(包括理解this指向問題)

    總結(jié)call,apply,bind方法的理解使用和區(qū)別。 call,apply,bind這三個方法在JavaScript中是用來改變函數(shù)調(diào)用的this指向。那么改變函數(shù)this指向有什么用呢?我們先來看一段代碼 var a= { name:harden, fn:function () { console.log(this.name); } } var b =...

    nanchen2251 評論0 收藏0
  • JS 中的this指向

    摘要:當碰到時呵呵再看一個呵呵再來呵呵呵呵呵呵呵呵什么意思呢如果返回值是一個對象,那么指向的是構(gòu)造函數(shù)的實例但是并沒有被返回,如果返回值不是一個對象那么還是指向構(gòu)造函數(shù)創(chuàng)建的實例。 為什么要學(xué)習(xí)this?如果你學(xué)過面向?qū)ο缶幊?,那你肯定知道干什么用的,如果你沒有學(xué)過,那么暫時可以不用看這篇文章,當然如果你有興趣也可以看看,畢竟這是js中必須要掌握的東西。 1. this指向調(diào)用他的對象 首先...

    KavenFan 評論0 收藏0
  • 論普通函數(shù)和箭頭函數(shù)的區(qū)別以及箭頭函數(shù)的注意事項、不適用場景

    摘要:第二種情況是箭頭函數(shù)的如果指向普通函數(shù)它的繼承于該普通函數(shù)。箭頭函數(shù)的指向全局,使用會報未聲明的錯誤。 showImg(https://segmentfault.com/img/remote/1460000018610072?w=600&h=400); 箭頭函數(shù)是ES6的API,相信很多人都知道,因為其語法上相對于普通函數(shù)更簡潔,深受大家的喜愛。就是這種我們?nèi)粘i_發(fā)中一直在使用的API...

    paulquei 評論0 收藏0
  • this指向問題的經(jīng)典場景

    摘要:常用場景以函數(shù)形式調(diào)用指向指向了以方法形式調(diào)用指向調(diào)用方法的那個對象指向顏色為紅色構(gòu)造函數(shù)調(diào)用指向?qū)嵗膶ο蟠颂幏謩e指向的實例對象控制臺輸出使用對象的方法時指向報錯因為是的一個方法更改錯誤使顏色為調(diào)用了這個方法此時的指向此操作將指向的賦給則 THIS常用場景 1、以函數(shù)形式調(diào)用,this指向window function fn(m,n){ m=2; n=3; console...

    dongxiawu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<