摘要:區(qū)分構(gòu)造器是否顯式地返回一個(gè)類型的對(duì)象例如不顯式返回對(duì)象小闊愛寶批龍小闊愛以及顯式返回對(duì)象小闊愛寶批龍寶批龍或調(diào)用跟普通函數(shù)相比,這種方式可以動(dòng)態(tài)改變傳入函數(shù)的例如小闊愛寶批龍小闊愛寶批龍
在js中,this總是指向一個(gè)對(duì)象,具體要看那個(gè)對(duì)象在運(yùn)行時(shí)函數(shù)的執(zhí)行環(huán)境(動(dòng)態(tài)綁定),即“函數(shù)在誰那被調(diào)用,this就指向誰”。
1、在對(duì)象的方法內(nèi)調(diào)用——指向該對(duì)象
例如
var obj = { name: "小闊愛", getName: function () { console.log("this === obj?", this === obj); console.log("this.name=", this.name); } }; obj.getName(); // "小闊愛"
2、在普通方法內(nèi)調(diào)用——指向全局對(duì)象window
例如
window.name = "小闊愛"; var getName = function () { return this.name; }; console.log("getName=", getName()); // 小闊愛
或者
window.name = "小闊愛"; var obj = { name: "寶批龍", getName: function () { return this.name; } }; var getName = obj.getName; console.log("getName=", getName()); // 小闊愛
或者——當(dāng)函數(shù)里面嵌套函數(shù)時(shí),指向window
window.id = "xiaokuoai"; document.getElementById("baopilong").onclick = function () { console.log("this.id=", this.id); // "baopilong" var newFun = function () { console.log("this.id=", this.id); // "xiaokuoai" } newFun(); };
注意:在ES5的strict模式下,普通函數(shù)內(nèi)的this被規(guī)定為不會(huì)指向window,而是undefined
例如
function func () { "user strict" console.log("this=", this); // undefined } func()
3、構(gòu)造器調(diào)用(被new運(yùn)算符調(diào)用)
當(dāng)函數(shù)被new運(yùn)算符調(diào)用時(shí),該函數(shù)總會(huì)返回一個(gè)對(duì)象。
例如(一般情況)
var obj = function () { this.name = "小闊愛"; }; var newObj = new obj(); console.log("newObj.name=", newObj.name); // "小闊愛"
特殊情況:(函數(shù)有返回值的情況)
如果返回值是一個(gè)對(duì)象,那么this指向的就是那個(gè)返回的對(duì)象,如果返回值不是一個(gè)對(duì)象那么this還是指向函數(shù)的實(shí)例。(區(qū)分構(gòu)造器是否顯式地返回一個(gè)object類型的對(duì)象)
例如(不顯式返回object對(duì)象)
var obj = function () { this.name = "小闊愛"; return "寶批龍"; }; var newObj = new obj(); console.log("newObj.name=", newObj.name); // "小闊愛"
以及(顯式返回object對(duì)象)
var obj = function () { this.name = "小闊愛"; return { name: "寶批龍" }; }; var newObj = new obj(); console.log("newObj.name=", newObj.name); // "寶批龍"
4、call或apply調(diào)用
跟普通函數(shù)相比,這種方式可以動(dòng)態(tài)改變傳入函數(shù)的this
例如
var obj1 = { name: "小闊愛", getName: function () { return this.name; } }; var obj2 = { name: "寶批龍" }; console.log("obj1.getName=", obj1.getName()); // "小闊愛" console.log("obj1.getName.call(obj2)=", obj1.getName.call(obj2)); // "寶批龍"
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107694.html
摘要:對(duì)象會(huì)記住它的原型給對(duì)象提供了一個(gè)名為的隱藏屬性,某個(gè)對(duì)象的屬性默認(rèn)會(huì)指向它的構(gòu)造器的原型對(duì)象,即。我們通過代碼來驗(yàn)證再來實(shí)際上,就是對(duì)象跟對(duì)象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對(duì)未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語(yǔ)言的對(duì)象系統(tǒng)中,封裝數(shù)據(jù)是由語(yǔ)法解析來實(shí)現(xiàn)的,這些語(yǔ)言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...
摘要:構(gòu)造器的外表跟普通函數(shù)一樣,他們的區(qū)別在于被調(diào)用的方式。即,使用運(yùn)算符創(chuàng)建對(duì)象時(shí),就是將函數(shù)當(dāng)作構(gòu)造器調(diào)用。本節(jié)內(nèi)容為設(shè)計(jì)模式與開發(fā)實(shí)踐第二章筆記。 this JavaScript的this總是指向一個(gè)對(duì)象,至于指向哪個(gè)對(duì)象,是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境的動(dòng)態(tài)綁定的,而非函數(shù)被聲明時(shí)的環(huán)境。 this的指向 this的指向大致可以分為以下4類: 作為對(duì)象的方法調(diào)用 作為普通函數(shù)調(diào)用 ...
摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...
摘要:難怪超過三分之一的開發(fā)人員工作需要一些知識(shí)。但是隨著行業(yè)的飽和,初中級(jí)前端就業(yè)形勢(shì)不容樂觀。整個(gè)系列的文章大概有篇左右,從我是如何成為一個(gè)前端工程師,到各種前端框架的知識(shí)。 為什么 call 比 apply 快? 這是一個(gè)非常有意思的問題。 作者會(huì)在參數(shù)為3個(gè)(包含3)以內(nèi)時(shí),優(yōu)先使用 call 方法進(jìn)行事件的處理。而當(dāng)參數(shù)過多(多余3個(gè))時(shí),才考慮使用 apply 方法。 這個(gè)的原因...
閱讀 2127·2021-09-29 09:35
閱讀 2005·2019-08-30 14:15
閱讀 3027·2019-08-30 10:56
閱讀 1016·2019-08-29 16:59
閱讀 635·2019-08-29 14:04
閱讀 1368·2019-08-29 12:30
閱讀 1088·2019-08-28 18:19
閱讀 563·2019-08-26 11:51