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