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

資訊專欄INFORMATION COLUMN

[學(xué)習筆記] JavaScript中的 this

xioqua / 396人閱讀

摘要:但是總有一個原則,那就是指的是調(diào)用函數(shù)的那個對象。還有另一個原則當沒有明確的調(diào)用函數(shù)的那個對象時,指向全局對象,瀏覽器模式下就是了。設(shè)置的值這兩個方法的作用都是在特定的作用域中調(diào)用函數(shù),從而設(shè)置了函數(shù)體內(nèi)的值。

感覺上篇文章還是三四天前寫的,看看日期已經(jīng)10天了。。時間過的真快!趕緊補篇,js中的this是我學(xué)習了但一直沒來得及總結(jié)的,今天就簡要說說 this 吧~

this簡述

每個函數(shù)在被調(diào)用時都會自動取得兩個特殊的對象:thisarguments,arguments 是一個類數(shù)組對象,包含著傳入函數(shù)中的所有參數(shù), this 引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對象。

this 對象是在運行時基于函數(shù)的執(zhí)行環(huán)境綁定的,它可能是全局對象或者其他的某個對象,隨著函數(shù)的執(zhí)行環(huán)境不同,this的值也會不一樣。但是總有一個原則,那就是

  

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

還有另一個原則:當沒有明確的調(diào)用函數(shù)的那個對象時,this指向全局對象global,瀏覽器模式下就是window了。

  

By default, this refers to the global object.

下面具體講講this 的指代原則。

this的指代原則 1. 函數(shù)直接被調(diào)用

此時函數(shù)屬于全局性調(diào)用,其this代表全局對象global

var a = 5;

function test() {
    console.log(this.a);
}

test(); // 5

注意下面這種情況:

function f1(){
    console.log(this);
    function f2(){
        console.log(this);
    }
    f2();
}
f1();  // Window window

f2()輸出的也是window,可見無論是在全局中直接被調(diào)用,還是內(nèi)嵌在函數(shù)中被調(diào)用,只要是直接通過名字調(diào)用函數(shù)的,函數(shù)中的this非嚴格模式下都是指向全局對象,而嚴格模式下就是undefined

2. 函數(shù)作為對象的方法調(diào)用

此時this指向這個對象。

function test() {
    console.log(this.a);
}

var obj = {};
obj.a = 5;
obj.m = test;
obj.m(); // 5
3. 函數(shù)作為構(gòu)造函數(shù)調(diào)用

此時,this指向生成的新對象。

var a = 3; //全局變量a

function Test() {
    this.a = 5; // 對象屬性a
}

var obj = new Test();
console.log(obj.a); // 5, 不是3!
4. 匿名函數(shù)中的this
  

匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此,其this對象通常指向window。

var name = "The window";

var obj = {
    name: "My object",

    getName: function() {
        return function() {
            return this.name;
        };
    }
};

console.log(obj.getName()()); // "The window"
設(shè)置this的值 1. call() / apply()

這兩個方法的作用都是在特定的作用域中調(diào)用函數(shù),從而設(shè)置了函數(shù)體內(nèi)this 的值。
apply() 方法接收兩個參數(shù):第一個參數(shù)是函數(shù)要運行的作用域,即對象。第二個參數(shù)是參數(shù)數(shù)組,既可以是Array的實例,也可以是arguments對象。call()apply()的作用相同,二者唯一的差別就是接收參數(shù)的方式不同,即在使用call()方法時,傳遞給函數(shù)的參數(shù)必須逐個列舉出來。
通過例子看call()/apply()是如何改變this值的。

window.color = "red";
var o = {color: "blue"};

function sayColor() {
    console.log(this.color);
}
sayColor.call(o); // blue

sayColor.call(window); // red
sayColor.call(this); // red
sayColor(); // red
2. bind()

該方法創(chuàng)建一個函數(shù)的實例,其this的值會被綁定到傳給bind()函數(shù)的值。創(chuàng)建的新函數(shù)無論在哪里調(diào)用,this的值都是固定的。

window.color = "red";
var o = {color: "blue"};

function sayColor() {
    console.log(this.color);
}
var newSaycolor = sayColor.bind(o);
newSayColor(); // blue,全局中調(diào)用,結(jié)果仍為blue

需要注意的是,支持bind()方法的瀏覽器有 IE9+ 、Firefox 4+ 、 Safari 5.1+ 、 Opera 12+ 和 Chrome。

eval()

使用 eval() 方法時,this 指向哪里呢?
答案很簡單,看誰在調(diào)用 eval() 方法,eval()中的this就是調(diào)用者的執(zhí)行環(huán)境中的 this

這是我關(guān)于this的一點理解,歡迎大家拍磚~

參考文章:

Javascript的this用法
深入淺出 JavaScript 中的 this
Javascript中this關(guān)鍵字詳解

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

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

相關(guān)文章

  • 重學(xué)前端學(xué)習筆記(十九)--JavaScript中的函數(shù)

    摘要:方法在中定義的函數(shù)。這種聲明方式會定義一個生成器函數(shù),它返回一個對象。類用定義的類,實際上也是函數(shù)。調(diào)用函數(shù)時使用的引用,決定了函數(shù)執(zhí)行時刻的值。表示當為時,取全局對象,對應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時傳入的值。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習過程的一些要...

    genefy 評論0 收藏0
  • 重學(xué)前端學(xué)習筆記(十九)--JavaScript中的函數(shù)

    摘要:方法在中定義的函數(shù)。這種聲明方式會定義一個生成器函數(shù),它返回一個對象。類用定義的類,實際上也是函數(shù)。調(diào)用函數(shù)時使用的引用,決定了函數(shù)執(zhí)行時刻的值。表示當為時,取全局對象,對應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時傳入的值。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習過程的一些要...

    lcodecorex 評論0 收藏0
  • 重學(xué)前端學(xué)習筆記(十九)--JavaScript中的函數(shù)

    摘要:方法在中定義的函數(shù)。這種聲明方式會定義一個生成器函數(shù),它返回一個對象。類用定義的類,實際上也是函數(shù)。調(diào)用函數(shù)時使用的引用,決定了函數(shù)執(zhí)行時刻的值。表示當為時,取全局對象,對應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時傳入的值。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習過程的一些要...

    LinkedME2016 評論0 收藏0
  • 重學(xué)前端學(xué)習筆記(八)--JavaScript中的原型和類

    摘要:用構(gòu)造器模擬類的兩種方法在構(gòu)造器中修改,給添加屬性修改構(gòu)造器的屬性指向的對象,它是從這個構(gòu)造器構(gòu)造出來的所有對象的原型。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學(xué)習【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:kai...

    nanfeiyan 評論0 收藏0

發(fā)表評論

0條評論

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