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

資訊專欄INFORMATION COLUMN

JavaScript 中 this 的詳解

cyrils / 2329人閱讀

摘要:作為構(gòu)造函數(shù)調(diào)用中沒(méi)有類(lèi),但是可以從構(gòu)造器中創(chuàng)建對(duì)象,并提供了運(yùn)算符來(lái)進(jìn)行調(diào)用該構(gòu)造器。構(gòu)造器的外表跟普通函數(shù)一樣,大部分的函數(shù)都可以當(dāng)做構(gòu)造器使用。如果構(gòu)造函數(shù)顯式的返回一個(gè)對(duì)象,那么則會(huì)指向該對(duì)象。

this 的指向

this 是 js 中定義的關(guān)鍵字,它自動(dòng)定義于每一個(gè)函數(shù)域內(nèi),但是它的指向卻讓人很迷惑。在實(shí)際應(yīng)用中,this 的指向大致可以分為以下四種情況。

1.作為普通函數(shù)調(diào)用

當(dāng)函數(shù)作為一個(gè)普通函數(shù)被調(diào)用,this 指向全局對(duì)象。在瀏覽器里,全局對(duì)象就是 window。

window.name = "linxin";
function getName(){
    console.log(this.name);
}
getName();                   // linxin

可以看出,此時(shí) this 指向了全局對(duì)象 window。
在ECMAScript5的嚴(yán)格模式下,這種情況 this 已經(jīng)被規(guī)定不會(huì)指向全局對(duì)象了,而是 undefined。

"use strict";
function fun(){
    console.log(this);
}
fun();                      // undefined
2.作為對(duì)象的方法調(diào)用

當(dāng)函數(shù)作為一個(gè)對(duì)象里的方法被調(diào)用,this 指向該對(duì)象

var obj = {
    name : "linxin",
    getName : function(){
        console.log(this.name);
    }
}

obj.getName();              // linxin

如果把對(duì)象的方法賦值給一個(gè)變量,再調(diào)用這個(gè)變量:

var obj = {
    fun1 : function(){
        console.log(this);
    }
}
var fun2 = obj.fun1;
fun2();                     // window

此時(shí)調(diào)用 fun2 方法 輸出了 window 對(duì)象,說(shuō)明此時(shí) this 指向了全局對(duì)象。給 fun2 賦值,其實(shí)是相當(dāng)于:

var fun2 = function(){
    console.log(this);
}

可以看出,此時(shí)的 this 已經(jīng)跟 obj 沒(méi)有任何關(guān)系了。這時(shí) fun2 是作為普通函數(shù)調(diào)用。

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

js中沒(méi)有類(lèi),但是可以從構(gòu)造器中創(chuàng)建對(duì)象,并提供了 new 運(yùn)算符來(lái)進(jìn)行調(diào)用該構(gòu)造器。構(gòu)造器的外表跟普通函數(shù)一樣,大部分的函數(shù)都可以當(dāng)做構(gòu)造器使用。當(dāng)構(gòu)造函數(shù)被調(diào)用時(shí),this 指向了該構(gòu)造函數(shù)實(shí)例化出來(lái)的對(duì)象。

var Person = function(){
    this.name = "linxin";
}
var obj = new Person();
console.log(obj.name);      // linxin

如果構(gòu)造函數(shù)顯式的返回一個(gè)對(duì)象,那么 this 則會(huì)指向該對(duì)象。

var Person = function(){
    this.name = "linxin";
    return {
        name : "linshuai"
    }
}
var obj = new Person();
console.log(obj.name);      // linshuai

如果該函數(shù)不用 new 調(diào)用,當(dāng)作普通函數(shù)執(zhí)行,那么 this 依然指向全局對(duì)象。

4.call() 或 apply() 調(diào)用

通過(guò)調(diào)用函數(shù)的 call() 或 apply() 方法可動(dòng)態(tài)的改變 this 的指向。

var obj1 = {
    name : "linxin",
    getName : function(){
        console.log(this.name);
    }
}
var obj2 = {
    name : "linshuai"
}

obj1.getName();             // linxin
obj1.getName.call(obj2);    // linshuai
obj1.getName.apply(obj2);   // linshuai

這兩個(gè)方法在js中都是非常常用的方法,可以閱讀下一篇:javascript 中 apply 、call 的詳解。

更多文章:lin-xin/blog

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

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

相關(guān)文章

  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類(lèi)繼承還要強(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ō)是阿里的前端妹子寫(xiě)的) this 的值到底...

    blair 評(píng)論0 收藏0
  • JavaScriptthis對(duì)象詳解

    摘要:再來(lái)看一個(gè)小的示例淘寶騰訊淘寶為什么輸出的依然是淘寶呢調(diào)用的是對(duì)象中的方法,方法里面有一個(gè)定時(shí)器,而定時(shí)器的一個(gè)參數(shù)是這里的指的就是的對(duì)象,然后方法里面有調(diào)用了,但是定時(shí)器中的指的是對(duì)象,所以最終調(diào)用的是對(duì)象中。 1.看前熱身 看一段代碼 var name = javascript; var obj = { name:js, foo:f...

    Integ 評(píng)論0 收藏0
  • javaScript原型及原型鏈詳解(二)

    摘要:當(dāng)然這還沒(méi)完,因?yàn)槲覀冞€有重要的一步?jīng)]完成,沒(méi)錯(cuò)就是上面的第行代碼,如果沒(méi)有這行代碼實(shí)例中的指針是指向構(gòu)造函數(shù)的,這樣顯然是不對(duì)的,因?yàn)檎G闆r下應(yīng)該指向它的構(gòu)造函數(shù),因此我們需要手動(dòng)更改使重新指向?qū)ο蟆? 第一節(jié)內(nèi)容:javaScript原型及原型鏈詳解(二) 第一節(jié)中我們介紹了javascript中的原型和原型鏈,這一節(jié)我們來(lái)講利用原型和原型鏈我們可以做些什么。 普通對(duì)象的繼承 ...

    widuu 評(píng)論0 收藏0
  • JavaScript apply 、call 詳解

    摘要:參數(shù)和是放在數(shù)組中傳入函數(shù),分別對(duì)應(yīng)參數(shù)的列表元素。而原函數(shù)中的并沒(méi)有被改變,依舊指向全局對(duì)象。保存原函數(shù)保存需要綁定的上下文剩余的參數(shù)轉(zhuǎn)為數(shù)組返回一個(gè)新函數(shù)下一篇介紹閉包中閉包的詳解。 apply 和 call 的區(qū)別 ECMAScript 規(guī)范給所有函數(shù)都定義了 call 與 apply 兩個(gè)方法,它們的應(yīng)用非常廣泛,它們的作用也是一模一樣,只是傳參的形式有區(qū)別而已。 apply(...

    Meils 評(píng)論0 收藏0
  • JavaScript隊(duì)列數(shù)據(jù)結(jié)構(gòu)詳解

      今天我們講講JavaScript隊(duì)列數(shù)據(jù)結(jié)構(gòu)詳解。 什么是隊(duì)列?  隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),隊(duì)列有兩種操作:插入和刪除;入隊(duì)和出隊(duì)。簡(jiǎn)單來(lái)說(shuō)就是允許插入的一端稱為隊(duì)尾、允許刪除的一端稱為隊(duì)頭;  如下圖展示了棧這個(gè)數(shù)據(jù)結(jié)構(gòu):  JavaScript中的隊(duì)列  要知道JavaScript中沒(méi)有有關(guān)隊(duì)列的數(shù)據(jù)模型,因此我們需要通過(guò)數(shù)組進(jìn)行模擬,當(dāng)數(shù)組中提供的push()和shift()選...

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

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

0條評(píng)論

閱讀需要支付1元查看
<