摘要:其中和在傳入要綁定的指向時(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)境
console.log(this); //Window對(duì)象 console.log(this === window); //true
在非嚴(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的指向取決于定義時(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事件處理函數(shù)中this的指向是觸發(fā)該事件的對(duì)象
App//當(dāng)點(diǎn)擊App時(shí),console.log(this),打印出來(lái)的值時(shí)App
構(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}
可以使用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
總結(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 =...
摘要:例如通過(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è)入門不...
摘要:文章目的是總結(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 ...
摘要:全局環(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)境 在...
摘要:字面形式允許你在不需要使用操作符和構(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á)式的字...
閱讀 1386·2021-09-24 10:26
閱讀 1696·2019-08-30 14:14
閱讀 2108·2019-08-29 16:54
閱讀 367·2019-08-29 14:09
閱讀 1477·2019-08-29 12:55
閱讀 932·2019-08-28 18:13
閱讀 1584·2019-08-26 13:39
閱讀 2569·2019-08-26 11:43