摘要:運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象的實(shí)例。新建對(duì)象鏈接對(duì)象設(shè)置指向原來(lái)指向執(zhí)行一次構(gòu)造函數(shù)返回對(duì)象當(dāng)代碼執(zhí)行時(shí),會(huì)發(fā)生以下事情一個(gè)繼承自的新對(duì)象被創(chuàng)建。使用指定的參數(shù)調(diào)用構(gòu)造函數(shù),并將綁定到新創(chuàng)建的對(duì)象。
new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象的實(shí)例。new 關(guān)鍵字會(huì)進(jìn)行如下的操作:
1.創(chuàng)建一個(gè)空的簡(jiǎn)單JavaScript對(duì)象(即{});
2.鏈接該對(duì)象(即設(shè)置該對(duì)象的構(gòu)造函數(shù))到另一個(gè)對(duì)象 ;
3.將步驟1新創(chuàng)建的對(duì)象作為this的上下文 ;
4.如果該函數(shù)沒(méi)有返回對(duì)象,則返回this。
window.name = "iii" function Person(){ this.name = 3 } Person.prototype.say = function(){ console.log(this.name) } var p1 = new Person(); p1.say() //3 function _new(P){ let o = {}; //1.新建對(duì)象 let arg = Array.prototype.slice.call(arguments,1); o.__proto__ = P.prototype; //2.鏈接對(duì)象 // P.prototype.constructor = P; P.apply(o,arg);//3.設(shè)置this指向obj(原來(lái)指向window)//執(zhí)行一次構(gòu)造函數(shù) return o;//4.返回對(duì)象 } var p2 = _new(Person) p2.say() //3 console.log(p2 instanceof Person ) //true console.log(p2.construtor === p1.construtor) //true
當(dāng)代碼 new Foo(...) 執(zhí)行時(shí),會(huì)發(fā)生以下事情:
一個(gè)繼承自 Foo.prototype 的新對(duì)象被創(chuàng)建。
使用指定的參數(shù)調(diào)用構(gòu)造函數(shù) Foo,并將 this 綁定到新創(chuàng)建的對(duì)象。new Foo 等同于 new Foo(),也就是沒(méi)有指定參數(shù)列表,F(xiàn)oo 不帶任何參數(shù)調(diào)用的情況。
由構(gòu)造函數(shù)返回的對(duì)象就是 new 表達(dá)式的結(jié)果。如果構(gòu)造函數(shù)沒(méi)有顯式返回一個(gè)對(duì)象,則使用步驟1創(chuàng)建的對(duì)象。(一般情況下,構(gòu)造函數(shù)不返回值,但是用戶可以選擇主動(dòng)返回對(duì)象,來(lái)覆蓋正常的對(duì)象創(chuàng)建步驟)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/110299.html
摘要:不區(qū)分類(lèi)和實(shí)例的概念,而是通過(guò)原型來(lái)實(shí)現(xiàn)面向?qū)ο缶幊?。新?chuàng)建的的原型鏈?zhǔn)且簿褪钦f(shuō),的原型指向函數(shù)的原型。最后,創(chuàng)建一個(gè)對(duì)象代碼和前面章節(jié)完全一樣小明繼承用定義對(duì)象的另一個(gè)巨大的好處是繼承更方便了。 JavaScript不區(qū)分類(lèi)和實(shí)例的概念,而是通過(guò)原型(prototype)來(lái)實(shí)現(xiàn)面向?qū)ο缶幊獭?原型是指當(dāng)我們想要?jiǎng)?chuàng)建xiaoming這個(gè)具體的學(xué)生時(shí),我們并沒(méi)有一個(gè)Student類(lèi)型可用...
摘要:在前端頁(yè)面中,把用純對(duì)象表示,負(fù)責(zé)顯示,兩者做到了最大化的分離把和關(guān)聯(lián)起來(lái)的就是。了解了思想后,自己用原生實(shí)現(xiàn)一個(gè)框架。注意數(shù)據(jù)描述符和存儲(chǔ)描述符不能同時(shí)存在,否則會(huì)報(bào)錯(cuò)報(bào)錯(cuò)數(shù)據(jù)攔截使用來(lái)實(shí)現(xiàn)數(shù)據(jù)攔截,從而實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽(tīng)。 在前端頁(yè)面中,把 Model 用純 JS 對(duì)象表示,View 負(fù)責(zé)顯示,兩者做到了最大化的分離 把 Model 和 View 關(guān)聯(lián)起來(lái)的就是 ViewModel。Vi...
摘要:語(yǔ)言缺陷是一門(mén)在極短時(shí)間里創(chuàng)造的腳本語(yǔ)言,它存在很多的不足,這使得在學(xué)習(xí)時(shí)無(wú)形加大了學(xué)習(xí)的難度,本文就將這些內(nèi)容進(jìn)行總結(jié),以防繼續(xù)掉坑。 JS語(yǔ)言缺陷 js是一門(mén)在極短時(shí)間里創(chuàng)造的腳本語(yǔ)言,它存在很多的不足,這使得在學(xué)習(xí)時(shí)無(wú)形加大了學(xué)習(xí)的難度,本文就將這些內(nèi)容進(jìn)行總結(jié),以防繼續(xù)掉坑。 1.變量提升 1.1 案例分析 先來(lái)說(shuō)一下變量提升,它其實(shí)就是先用后聲明,經(jīng)常被拿來(lái)說(shuō)明的一個(gè)例子是:...
摘要:對(duì)于圖片上傳,大家一定不陌生。項(xiàng)目地址一環(huán)境搭建本項(xiàng)目使用目前最新的和進(jìn)行開(kāi)發(fā),所以環(huán)境的搭建必不可少。在目錄下新建代碼內(nèi)容只有行,其輸入為一個(gè)圖片文件,輸出為一串編碼。同樣的方式,我們可以為也設(shè)置一個(gè)代理數(shù)組,以實(shí)現(xiàn)向外拋出數(shù)組的目的。 對(duì)于圖片上傳,大家一定不陌生。最近工作中遇到了關(guān)于圖片上傳的內(nèi)容,借此機(jī)會(huì)認(rèn)真研究了一番,遂一發(fā)不可收拾,最后琢磨了一個(gè)東西出來(lái)。在開(kāi)發(fā)的過(guò)程中有不...
閱讀 2371·2021-11-22 12:01
閱讀 2093·2021-11-12 10:34
閱讀 4609·2021-09-22 15:47
閱讀 2915·2019-08-30 15:56
閱讀 2919·2019-08-30 15:53
閱讀 2467·2019-08-30 13:53
閱讀 3470·2019-08-29 15:35
閱讀 3180·2019-08-29 12:27