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

資訊專欄INFORMATION COLUMN

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

lavnFan / 1583人閱讀

摘要:其中和在傳入要綁定的指向時(shí),立即執(zhí)行。需要注意的是,當(dāng)使用改變函數(shù)內(nèi)部的指向時(shí)如果傳入的不是一個(gè)對(duì)象,會(huì)調(diào)用相對(duì)的構(gòu)造函數(shù),進(jìn)行隱式類型裝換。

關(guān)于javascript中this指向的總結(jié) 瀏覽器環(huán)境
在全局作用域中,this的指向是window對(duì)象
console.log(this);
//Window對(duì)象
console.log(this === window);
//true
ES5函數(shù)中this的指向

非嚴(yán)格模式下,函數(shù)中的this指向window對(duì)象,因?yàn)榇藭r(shí)函數(shù)fn是window的一個(gè)屬性,所以運(yùn)行fn時(shí),fn中的this指向window。其實(shí)this的指向就是指向函數(shù)的運(yùn)行時(shí)環(huán)境。

var fn = function () {
    console.log(this);
    console.log(this === window);
}
fn(); 
//Window對(duì)象
//true

嚴(yán)格模式下,若不使用window調(diào)用函數(shù),函數(shù)中的this指向undefined;使用window調(diào)用時(shí),指向的時(shí)window對(duì)象。

var fn = function () {
    "use strict"
    console.log(this);
    console.log(this === window)
}
fn();
//undfined
//false
window.fn();
//Window對(duì)象
//true

嚴(yán)格模式下有一種例外的情況,就是在定時(shí)器中的this,此時(shí)無(wú)論使用window調(diào)用還是不使用window調(diào)用,this都指向window。

var fn = function () {
    "use strict"
    setTimeout(functioin(){
        console.log(this);
        console.log(this === window);
    },1000)
}
fn();
//Window對(duì)象
//true
在ES6中箭頭函數(shù)this的指向

在ES6中箭頭函數(shù)this的指向取決于定義時(shí)環(huán)境中的this指向一致

var fun = () => {
    console.log(this);
    console.log(this === window);
}
fun();
//Window對(duì)象
//true
//定義箭頭函數(shù)時(shí),就是這個(gè)過(guò)程:()=>{...}所在的環(huán)境是window,所以運(yùn)行fun()時(shí),箭頭函數(shù)內(nèi)部的this指向window
var obj = {
    name:"Jay",
    age:25,
    fn:()=>{console.log(this)},
    fun:function(){
        console.log(this)
    }
};
//在定義fn時(shí),fn內(nèi)部this的指向就是定義obj對(duì)象時(shí)所在的環(huán)境,obj所在的環(huán)境是window,所以調(diào)用obj.fn()時(shí),返回的this就是Window對(duì)象
obj.fn(); //Window對(duì)象
obj.fun();//{name: "Jay", age: 25, fn: ?, fun: ?}
var name = "Kobe";
var obj = {
    name:"Jay",
    age:25,
    fn1:function(){
        return function(){
            console.log(this.name);
        }
    },
    fn2:() =>{
        return () => {
            console.log(this.name);
        }
    }
};
var fnn1 = obj.fn1();
var fnn2 = obj.fn2();
fnn1();//Kobe
fnn2();//Kobe
在DOM事件中的this指向

DOM事件處理函數(shù)中this的指向是觸發(fā)該事件的對(duì)象

App
//當(dāng)點(diǎn)擊App時(shí),console.log(this),打印出來(lái)的值時(shí)
App
構(gòu)造函數(shù)中的this指向

構(gòu)造函數(shù)中的this的指向是通過(guò)構(gòu)造函數(shù)所創(chuàng)建出的對(duì)象實(shí)例

function Person (){
    this.name = "Jay",
    this.age = 25;
    console.log(this);
}
var p1 = new Person();
//Person {name: "Jay", age: 25}
改變this的指向

可以使用call()、apply()、bind()改變函數(shù)內(nèi)部this的指向(ES6中的箭頭函數(shù)除外)。其中call()和apply()在傳入要綁定的this指向時(shí),立即執(zhí)行。bind()在傳入要綁定的this指向時(shí),并不執(zhí)行,需要再次調(diào)用才會(huì)執(zhí)行。

使用call()改變this的指向

 var obj = {
    name:"Jay",
    age:25
};
function fn(){
    console.log(this === obj);
    console.log(this);
}
fn.call(obj);
//true
//{name: "Jay", age: 25}

使用apply()改變this的指向

 var obj = {
    name:"Jay",
    age:25
};
function fn(){
    console.log(this === obj);
    console.log(this);
}
fn.apply(obj);
//true
//{name: "Jay", age: 25}

使用bind()改變this的指向

 var obj = {
    name:"Jay",
    age:25
};
function fn(){
    console.log(this===obj);
    console.log(this);
}
//fn.bind(obj);不會(huì)立即執(zhí)行,需要再次調(diào)用才會(huì)執(zhí)行。
var fn1 = fn.bind(obj);
fn1();
//true
//{name: "Jay", age: 25}

需要注意的是,當(dāng)使用call()、apply()、bind()改變函數(shù)內(nèi)部this的指向時(shí),如果傳入的不是一個(gè)對(duì)象,會(huì)調(diào)用相對(duì)的構(gòu)造函數(shù),進(jìn)行隱式類型裝換。

function fn(){
    console.log(typeof this === "object");
    console.log(this);
}
fn.apply("I am a string");
//true
//String{"I am a string"}

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

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

相關(guān)文章

  • ES5 call,apply,bind方法總結(jié)(包括理解this指向問(wèn)題)

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

    nanchen2251 評(píng)論0 收藏0
  • javascript this的學(xué)習(xí)總結(jié)

    摘要:例如通過(guò),調(diào)用時(shí)強(qiáng)制把它的綁定到上。箭頭函數(shù)問(wèn)題箭頭函數(shù)體內(nèi)的對(duì)象就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象,固定不變。 剛?cè)腴Tjavascript,關(guān)于this的學(xué)習(xí),花了自己挺多的時(shí)間,做了比較多的功課,看了一篇又一篇的文章,也看了一些書(shū)籍,今天就結(jié)合看的那些東西總結(jié)下自己所學(xué)到的東西,方便留著以后回看,進(jìn)一步的學(xué)習(xí),這篇文章會(huì)不斷的更新,不斷的更新自己的想法,現(xiàn)在還是一個(gè)入門不...

    A Loity 評(píng)論0 收藏0
  • javascriptthis指向問(wèn)題總結(jié)

    摘要:文章目的是總結(jié)下這個(gè)事情,如果沒(méi)有考慮周全,遺漏某一條,請(qǐng)過(guò)路的留言寫,我在補(bǔ)上。類的實(shí)例在函數(shù)中的一般指向和中括號(hào)里面的第一個(gè)參數(shù)是誰(shuí)就指向誰(shuí)。輸出說(shuō)明指向的是輸出,說(shuō)明指向的是箭頭函數(shù)中的,就是定義是所在的對(duì)象,而不是使用時(shí)所在的對(duì)象 文章目的是總結(jié)下這個(gè)事情,如果沒(méi)有考慮周全,遺漏某一條,請(qǐng)過(guò)路的留言寫,我在補(bǔ)上。 在自制行函數(shù)中,this --> window let ...

    worldligang 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)——this對(duì)象

    摘要:全局環(huán)境在全局環(huán)境中使用,它會(huì)指向全局對(duì)象。作為構(gòu)造函數(shù)調(diào)用中的構(gòu)造函數(shù)很特殊,如果不使用調(diào)用,則和普通函數(shù)一樣。作為又一項(xiàng)約定俗成的準(zhǔn)則,構(gòu)造函數(shù)以大寫字母開(kāi)頭,提醒調(diào)用者使用正確的方式調(diào)用。 在JavaScript中,this關(guān)鍵字是動(dòng)態(tài)綁定的,或稱為運(yùn)行期綁定,這極大地增強(qiáng)的我們程序的靈活性,同時(shí)也給初學(xué)者帶來(lái)了很多困惑。本文總結(jié)了this的幾個(gè)使用場(chǎng)景和常見(jiàn)誤區(qū)。 全局環(huán)境 在...

    wzyplus 評(píng)論0 收藏0
  • JavaScript 面向?qū)ο箝_(kāi)發(fā)知識(shí)總結(jié)基礎(chǔ)篇

    摘要:字面形式允許你在不需要使用操作符和構(gòu)造函數(shù)顯式創(chuàng)建對(duì)象的情況下生成引用值。操作符以一個(gè)對(duì)象和一個(gè)構(gòu)造函數(shù)作為參數(shù)鑒別數(shù)組有前一小結(jié)可以知道鑒別數(shù)組類型可以使用。屬性是函數(shù)獨(dú)有的,表明該對(duì)象可以被執(zhí)行。這種函數(shù)被稱為匿名函數(shù)。 引子: 1.JavaScript 中的變量類型和類型檢測(cè) 1.1原始類型 1.2引用類型 1.3內(nèi)建類型的實(shí)例化 1.4函數(shù)的字面形式 1.5正則表達(dá)式的字...

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

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

0條評(píng)論

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