成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

xioqua / 447人閱讀

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

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

this簡述

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

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

  

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

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

  

By default, this refers to the global object.

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

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

此時(shí)函數(shù)屬于全局性調(diào)用,其this代表全局對(duì)象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非嚴(yán)格模式下都是指向全局對(duì)象,而嚴(yán)格模式下就是undefined

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

此時(shí)this指向這個(gè)對(duì)象。

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

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

此時(shí),this指向生成的新對(duì)象。

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

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

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

匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此,其this對(duì)象通常指向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()

這兩個(gè)方法的作用都是在特定的作用域中調(diào)用函數(shù),從而設(shè)置了函數(shù)體內(nèi)this 的值。
apply() 方法接收兩個(gè)參數(shù):第一個(gè)參數(shù)是函數(shù)要運(yùn)行的作用域,即對(duì)象。第二個(gè)參數(shù)是參數(shù)數(shù)組,既可以是Array的實(shí)例,也可以是arguments對(duì)象。call()apply()的作用相同,二者唯一的差別就是接收參數(shù)的方式不同,即在使用call()方法時(shí),傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來。
通過例子看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)建一個(gè)函數(shù)的實(shí)例,其this的值會(huì)被綁定到傳給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() 方法時(shí),this 指向哪里呢?
答案很簡單,看誰在調(diào)用 eval() 方法,eval()中的this就是調(diào)用者的執(zhí)行環(huán)境中的 this

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

參考文章:

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<