摘要:關(guān)鍵字關(guān)鍵字是什么關(guān)鍵字是中最復(fù)雜的機制之一。它是一個很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中??梢园堰@條規(guī)則看作是無法應(yīng)用其他規(guī)則時的默認(rèn)規(guī)則。取決于函數(shù)調(diào)用的位置注意事項避免多層避免數(shù)組方法中的避免回調(diào)函數(shù)中的
this關(guān)鍵字 this關(guān)鍵字是什么
this關(guān)鍵字是JavaScript中最復(fù)雜的機制之一。它是一個很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中。但是即使是非常有經(jīng)驗的JavaScript開發(fā)者也很難說清它到底指向什么。
1.this被定義在所有函數(shù)的作用域中
2.this指向哪個對象不取決于this被定義在哪里,而是取決于調(diào)用的位置
//定義一個全局變量 var v = 10; //this經(jīng)常被定義在函數(shù)的作用域中 function fn(){ //this 總是要返回一個對象 console .log(this . v); } fn();綁定規(guī)則 默認(rèn)綁定
在一個函數(shù)體中使用this,當(dāng)該函數(shù)被獨立調(diào)用??梢园堰@條規(guī)則看作是無法應(yīng)用其他規(guī)則時的默認(rèn)規(guī)則。
function foo(){ console .log(this .a); } var a=2; foo();//2隱式綁定
隱式綁定的規(guī)則需要考慮的是調(diào)用位置是否有上下文對象,或者說是否被某個對象擁有或者包含。
function foo(){ console .log(this.a); } var obj = { a:2, foo:foo }; obj.foo();//2隱式綁定丟失
隱式綁定丟失是最常見的this綁定問題,指的就是被隱式綁定的函數(shù)會丟失綁定對象,也就是說它會應(yīng)用默認(rèn)綁定,從而把this綁定到全局對象。
// 定義一個全局變量 var v = 100; // 定義一個函數(shù) function fn(){ console.log(this.v); } // 定義一個對象 var obj = { v : 200, f : fn // 對象的f()方法指向fn()函數(shù) } // 定義一個全局變量,并被賦值為對象obj的f()方法 var fun = obj.f; // 將fun作為一個函數(shù)進行調(diào)用 fun();顯示綁定
顯示綁定就是明確在調(diào)用時,this所綁定的對象。JavaScript中提供了apply()方法和call()方法實現(xiàn),這兩個方法的第一個參數(shù)接收是一個對象,會把這個對象綁定到this,接著在調(diào)用函數(shù)時指定這個this
// 定義一個全局變量 var v = 100; // 定義一個函數(shù) function fn(){ console.log(this.v); } // 定義一個對象 var obj = { v : 200, f : fn // 對象的f()方法指向fn()函數(shù) } // 定義一個全局變量,并被賦值為對象obj的f()方法 var fun = obj.f; // 將fun作為一個函數(shù)進行調(diào)用 fun.apply(obj);new綁定
1.創(chuàng)建(或者說構(gòu)造)一個全新的對象
2.這個新對象會綁定到函數(shù)調(diào)用的this
3.如果函數(shù)沒有返回其他對象,那么new表達式中的函數(shù)調(diào)用會自動返回這個新對象。
function Hero(name){ this.name = name; } // this取決于函數(shù)調(diào)用的位置 var hero1 = new Hero("hhh"); var hero2 = new Hero("xxx");注意事項
1.避免多層this
2.避免數(shù)組方法中的this
3.避免回調(diào)函數(shù)中的this
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96941.html
摘要:出于這個原因,該函數(shù)返回的,所以在這里指的是,所以返回的是第一個說明關(guān)鍵字通常在對象的構(gòu)造函數(shù)中使用,用來引用對象。重寫無法重寫,因為它是一個關(guān)鍵字。結(jié)論,表示當(dāng)前的上下文對象是一個對象,可以調(diào)用對象所擁有的屬性,方法。 在《javaScript語言精粹》這本書中,把 this 出現(xiàn)的場景分為四類,簡單的說就是: 有對象就指向調(diào)用對象 沒調(diào)用對象就指向全局對象 用new構(gòu)造就指向新對...
摘要:關(guān)鍵字關(guān)鍵字是什么關(guān)鍵字是中最復(fù)雜的機制之一。它是一個很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中??梢园堰@條規(guī)則看作是無法應(yīng)用其他規(guī)則時的默認(rèn)規(guī)則。取決于函數(shù)調(diào)用的位置注意事項避免多層避免數(shù)組方法中的避免回調(diào)函數(shù)中的 this關(guān)鍵字 this關(guān)鍵字是什么 this關(guān)鍵字是JavaScript中最復(fù)雜的機制之一。它是一個很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中。但是即使是非常有經(jīng)驗的J...
摘要:原文鏈接參考深入理解原型和閉包完結(jié)王福朋博客園中的作用域詳解博客園 前言 王福朋老師的 JavaScript原型和閉包系列 文章看了不下三遍了,最為一個初學(xué)者,每次看的時候都會有一種 大徹大悟 的感覺,而看完之后卻總是一臉懵逼。原型與閉包 可以說是 JavaScirpt 中理解起來最難的部分了,當(dāng)然,我也只是了解到了一些皮毛,對于 JavaScript OOP 更是缺乏經(jīng)驗。這里我想總...
摘要:首先,必須搞清楚在里面,函數(shù)的幾種調(diào)用方式普通函數(shù)調(diào)用作為方法來調(diào)用作為構(gòu)造函數(shù)來調(diào)用使用方法來調(diào)用方法箭頭函數(shù)但是不管函數(shù)是按哪種方法來調(diào)用的,請記住一點誰調(diào)用這個函數(shù)或方法關(guān)鍵字就指向誰。 本文主要解釋在JS里面this關(guān)鍵字的指向問題(在瀏覽器環(huán)境下)。 首先,必須搞清楚在JS里面,函數(shù)的幾種調(diào)用方式: 普通函數(shù)調(diào)用 作為方法來調(diào)用 作為構(gòu)造函數(shù)來調(diào)用 使用apply/call...
在JavaScript中‘this’關(guān)鍵字是一個非常重要的概念,我們雖然知道它重要,但它也十分的晦澀難懂,也給我們學(xué)習(xí)造成不小的困擾?! ∈裁词?#39;this'關(guān)鍵字 'this'關(guān)鍵字是為每個執(zhí)行上下文(每個函數(shù))創(chuàng)建的一個特殊變量;所以一般來說,在使用'this'關(guān)鍵字的函數(shù)中,'this'永遠(yuǎn)是取其所有者的值??偨Y(jié)一句話是該函...
閱讀 1432·2021-11-09 09:45
閱讀 1797·2021-11-04 16:09
閱讀 1460·2021-10-14 09:43
閱讀 1829·2021-09-22 15:24
閱讀 1612·2021-09-07 10:06
閱讀 1605·2019-08-30 14:15
閱讀 993·2019-08-30 12:56
閱讀 1573·2019-08-29 17:22