摘要:關(guān)鍵字關(guān)鍵字是什么關(guān)鍵字是中最復(fù)雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中??梢园堰@條規(guī)則看作是無(wú)法應(yīng)用其他規(guī)則時(shí)的默認(rèn)規(guī)則。
this關(guān)鍵字 this關(guān)鍵字是什么
this關(guān)鍵字是JavaScript中最復(fù)雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被定義在所有函數(shù)的作用域中。但是即使是非常有經(jīng)驗(yàn)的JavaScript開發(fā)者也很難說(shuō)清它到底指向什么。
1.this被定義在所有函數(shù)的作用域中
2.this指向哪個(gè)對(duì)象不取決于this被定義在哪里,而是取決于調(diào)用的位置
//定義一個(gè)全局變量 var v = 10; //this經(jīng)常被定義在函數(shù)的作用域中 function fn(){ //this 總是要返回一個(gè)對(duì)象 console .log(this . v); } fn();綁定規(guī)則 默認(rèn)綁定
在一個(gè)函數(shù)體中使用this,當(dāng)該函數(shù)被獨(dú)立調(diào)用??梢园堰@條規(guī)則看作是無(wú)法應(yīng)用其他規(guī)則時(shí)的默認(rèn)規(guī)則。
function foo(){ console .log(this .a); } var a=2; foo();//2隱式綁定
隱式綁定的規(guī)則需要考慮的是調(diào)用位置是否有上下文對(duì)象,或者說(shuō)是否被某個(gè)對(duì)象擁有或者包含。
function foo(){ console .log(this.a); } var obj = { a:2, foo:foo }; obj.foo();//2隱式綁定丟失
隱式綁定丟失是最常見的this綁定問(wèn)題,指的就是被隱式綁定的函數(shù)會(huì)丟失綁定對(duì)象,也就是說(shuō)它會(huì)應(yīng)用默認(rèn)綁定,從而把this綁定到全局對(duì)象。
// 定義一個(gè)全局變量 var v = 100; // 定義一個(gè)函數(shù) function fn(){ console.log(this.v); } // 定義一個(gè)對(duì)象 var obj = { v : 200, f : fn // 對(duì)象的f()方法指向fn()函數(shù) } // 定義一個(gè)全局變量,并被賦值為對(duì)象obj的f()方法 var fun = obj.f; // 將fun作為一個(gè)函數(shù)進(jìn)行調(diào)用 fun();顯示綁定
顯示綁定就是明確在調(diào)用時(shí),this所綁定的對(duì)象。JavaScript中提供了apply()方法和call()方法實(shí)現(xiàn),這兩個(gè)方法的第一個(gè)參數(shù)接收是一個(gè)對(duì)象,會(huì)把這個(gè)對(duì)象綁定到this,接著在調(diào)用函數(shù)時(shí)指定這個(gè)this
// 定義一個(gè)全局變量 var v = 100; // 定義一個(gè)函數(shù) function fn(){ console.log(this.v); } // 定義一個(gè)對(duì)象 var obj = { v : 200, f : fn // 對(duì)象的f()方法指向fn()函數(shù) } // 定義一個(gè)全局變量,并被賦值為對(duì)象obj的f()方法 var fun = obj.f; // 將fun作為一個(gè)函數(shù)進(jìn)行調(diào)用 fun.apply(obj);new綁定
1.創(chuàng)建(或者說(shuō)構(gòu)造)一個(gè)全新的對(duì)象
2.這個(gè)新對(duì)象會(huì)綁定到函數(shù)調(diào)用的this
3.如果函數(shù)沒有返回其他對(duì)象,那么new表達(dá)式中的函數(shù)調(diào)用會(huì)自動(dòng)返回這個(gè)新對(duì)象。
function Hero(name){ this.name = name; } // this取決于函數(shù)調(diào)用的位置 var hero1 = new Hero("hhh"); var hero2 = new Hero("xxx");
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/96959.html
在JavaScript中‘this’關(guān)鍵字是一個(gè)非常重要的概念,我們雖然知道它重要,但它也十分的晦澀難懂,也給我們學(xué)習(xí)造成不小的困擾?! ∈裁词?#39;this'關(guān)鍵字 'this'關(guān)鍵字是為每個(gè)執(zhí)行上下文(每個(gè)函數(shù))創(chuàng)建的一個(gè)特殊變量;所以一般來(lái)說(shuō),在使用'this'關(guān)鍵字的函數(shù)中,'this'永遠(yuǎn)是取其所有者的值??偨Y(jié)一句話是該函...
摘要:字符串也可以是一個(gè)對(duì)象日期是一個(gè)對(duì)象數(shù)學(xué)和正則表達(dá)式也是對(duì)象數(shù)組是一個(gè)對(duì)象甚至函數(shù)也可以是對(duì)象一般的語(yǔ)言,都是利用類來(lái)創(chuàng)建對(duì)象,完成面向?qū)ο蟮倪^(guò)程。 在之前的一篇文章的末尾我提到了JavaScript的對(duì)象創(chuàng)建方法,可以利用函數(shù),內(nèi)置對(duì)象和this等關(guān)鍵詞實(shí)現(xiàn)對(duì)象的創(chuàng)建。但是很遺憾,我最先接觸的面向?qū)ο蟮木幊陶Z(yǔ)言是java,因而對(duì)于這些實(shí)現(xiàn)面向?qū)ο蟮姆椒ú⒎亲约旱氖走x。下面是那篇文章:...
摘要:在中通過(guò)關(guān)鍵字方式調(diào)用的函數(shù)都被認(rèn)為是構(gòu)造函數(shù)。這個(gè)新創(chuàng)建的對(duì)象的被指向到構(gòu)造函數(shù)的。上的方法不起效果當(dāng)然你要是這樣的形式指定了返回的內(nèi)容,它自然會(huì)原樣返回啦工廠模型為了不使用關(guān)鍵字,構(gòu)造函數(shù)必須顯式的返回一個(gè)值。 個(gè)人博客原址 函數(shù) 函數(shù)式一塊javascript代碼,定義一次,可以被多次調(diào)用與執(zhí)行,JS中的函數(shù)也是對(duì)象,所以JS函數(shù)可以像其他對(duì)象那樣操作,和傳遞,所以也稱函數(shù)對(duì)象函...
摘要:但是,的本質(zhì)仍然是函數(shù),是構(gòu)造函數(shù)的另外一種寫法。報(bào)錯(cuò)原生構(gòu)造函數(shù)的繼承對(duì)于一些原生的構(gòu)造函數(shù),比如,,,等,在是無(wú)法通過(guò)方法實(shí)現(xiàn)原生函數(shù)的內(nèi)部屬性,原生函數(shù)內(nèi)部的無(wú)法綁定,內(nèi)部屬性獲得不了。 在沒有學(xué)習(xí) ES6 之前,學(xué)習(xí) React,真的是一件非常痛苦的事情。即使之前你對(duì) ES5 有著很好的基礎(chǔ),包括閉包、函數(shù)、原型鏈和繼承,但是 React 中已經(jīng)普遍使用 ES6 的語(yǔ)法,包括 ...
摘要:特性介紹箭頭函數(shù)是新增的特性之一,它為這門語(yǔ)言提供了一種全新的書寫函數(shù)的語(yǔ)法。用生成的函數(shù)會(huì)定義一個(gè)自己的,而箭頭函數(shù)沒有自己的,而是會(huì)和上一層的作用域共享。 本文同步自我得博客:http://www.joeray61.com JS中的箭頭 箭頭在JS里并不算是個(gè)新鮮的玩意兒,一直以來(lái),JS都支持-->這樣的箭頭。 很早的時(shí)候有些瀏覽器還不支持JS,當(dāng)時(shí)的人們?yōu)榱思嫒葸@些瀏覽器,需要這...
閱讀 932·2023-04-26 00:37
閱讀 799·2021-11-24 09:39
閱讀 2233·2021-11-23 09:51
閱讀 3972·2021-11-22 15:24
閱讀 802·2021-10-19 11:46
閱讀 1914·2019-08-30 13:53
閱讀 2506·2019-08-29 17:28
閱讀 1399·2019-08-29 14:11