摘要:構(gòu)造函數(shù)模式如果要?jiǎng)?chuàng)建許多對(duì)象,傳統(tǒng)方法存在以下問(wèn)題對(duì)象名太多,容易搞重復(fù)新建一個(gè)對(duì)象就要全部重寫(xiě)屬性和方法,過(guò)于復(fù)雜無(wú)法發(fā)揮的面向?qū)ο髢?yōu)勢(shì)繼承由于本身沒(méi)有類的概念,因此誕生了構(gòu)造函數(shù)模式來(lái)創(chuàng)建對(duì)象,該方法利用函數(shù)創(chuàng)建對(duì)象。
對(duì)象,一種數(shù)據(jù)類型。對(duì)象是屬性(變量)和方法(函數(shù))結(jié)合在一起的數(shù)據(jù)實(shí)體
對(duì)象的出現(xiàn),就是為了解決封裝的問(wèn)題??梢詫⒃S多屬性與方法封裝在一個(gè)對(duì)象里,方便調(diào)用,也符合人的思考方式。
JavaScript中創(chuàng)建對(duì)象的基本方法創(chuàng)建Object實(shí)例,再添加屬性和方法
var person = new Object(); person.name = "Jonathan"; person.age = 23; person.job = "Developer"; person.sayName = function () { console.log(this.name); };
對(duì)象字面量方法
由于上述寫(xiě)法繁瑣,故出現(xiàn)了對(duì)象字面量方法創(chuàng)建對(duì)象。
var person = { name: "Jonathan", age: 23, job: "Developer", sayName: function () { console.log(this.name); } }; console.log(person.name); //Jonathan person.sayName(); //Jonathan
這樣一來(lái),就把屬性和方法封裝進(jìn)了一個(gè)對(duì)象中,方便調(diào)用。
構(gòu)造函數(shù)模式如果要?jiǎng)?chuàng)建許多對(duì)象,傳統(tǒng)方法存在以下問(wèn)題
對(duì)象名太多,容易搞重復(fù)
新建一個(gè)對(duì)象就要全部重寫(xiě)屬性和方法,過(guò)于復(fù)雜
無(wú)法發(fā)揮JavaScript的面向?qū)ο髢?yōu)勢(shì)(繼承)
由于JavaScript本身沒(méi)有類的概念,因此誕生了構(gòu)造函數(shù)模式來(lái)創(chuàng)建對(duì)象,該方法利用函數(shù)創(chuàng)建對(duì)象。由于函數(shù)本身也是對(duì)象,因此可以這么操作。
構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法是:
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ console.log(this.name); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 27, "Doctor");
要點(diǎn):
構(gòu)造函數(shù)命名應(yīng)以大寫(xiě)字母開(kāi)頭(約定俗成的規(guī)矩)
構(gòu)造函數(shù)本身也是函數(shù),只不過(guò)是用來(lái)創(chuàng)建對(duì)象的
要?jiǎng)?chuàng)建對(duì)象的實(shí)例,必須要用new操作符,否則跟調(diào)用函數(shù)無(wú)異。
任何函數(shù),只要通過(guò)new操作符來(lái)調(diào)用,它就可以作為構(gòu)造函數(shù)。
至此,一個(gè)Person對(duì)象的創(chuàng)建就完成了,它有以下優(yōu)點(diǎn):
新建對(duì)象只用給函數(shù)提供參數(shù),簡(jiǎn)化了創(chuàng)建。
有了實(shí)例的概念,如Person1就是Person的實(shí)例。無(wú)形之中給對(duì)象歸了類。
更好的體現(xiàn)了封裝,創(chuàng)建對(duì)象只用給參數(shù),不用關(guān)心對(duì)象內(nèi)部細(xì)節(jié)。
但用構(gòu)造函數(shù)模式的方法創(chuàng)建對(duì)象并不是完美的,它存在以下問(wèn)題,即:
每個(gè)方法(對(duì)象內(nèi)置函數(shù))都要在實(shí)例上重新創(chuàng)建一遍
構(gòu)造函數(shù)也可以用以下方法定義,方便我們發(fā)現(xiàn)問(wèn)題
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = new Function(console.log(this.name)); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); console.log(person1.sayName == person2sayName); //false
在新建對(duì)象person1和person2時(shí),分別新建了兩個(gè)不同的方法person1.sayName()和person2.sayName()。
但這很沒(méi)有必要,只需要公用一個(gè)sayName()方法就好了。為了解決上述問(wèn)題,誕生了原型模式
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91946.html
摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來(lái)說(shuō),通過(guò)詞法分析語(yǔ)法分析語(yǔ)法樹(shù),就可以開(kāi)始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫(xiě)在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:理解的函數(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ī)?lái)幫助....(據(jù)說(shuō)是阿里的前端妹子寫(xiě)的) this 的值到底...
摘要:編寫(xiě)高質(zhì)量的要點(diǎn)深入理解系列一知識(shí)點(diǎn)最小全局變量全局變量命名易與第三方的腳本引起沖突所以盡可能少的使用全局變量是很重要的相關(guān)策略有命名空間模式或是函數(shù)立即自動(dòng)執(zhí)行,但是要想讓全局變量少最重要的還是始終使用來(lái)聲明變量。 Title: 編寫(xiě)高質(zhì)量Javascript的要點(diǎn)-Review深入理解Javascript系列(一)date: 2017-6-9 14:14:20 status: p...
摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...
摘要:前言本章我們要講解的是五大原則語(yǔ)言實(shí)現(xiàn)的第篇,接口隔離原則。接口隔離原則和單一職責(zé)有點(diǎn)類似,都是用于聚集功能職責(zé)的,實(shí)際上可以被理解才具有單一職責(zé)的程序轉(zhuǎn)化到一個(gè)具有公共接口的對(duì)象。與我們下面討論的一些小節(jié)是里關(guān)于違反接口隔離原則的影響。 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語(yǔ)言實(shí)現(xiàn)的第4篇,接口隔離原則ISP(The Interface Segreg...
摘要:更多資料如果你想了解更多關(guān)于的資料,下面的連接對(duì)你絕對(duì)有用關(guān)于本文本文轉(zhuǎn)自大叔的深入理解系列。深入理解系列文章,包括了原創(chuàng),翻譯,轉(zhuǎn)載,整理等各類型文章,原文是大叔的一個(gè)非常不錯(cuò)的專題,現(xiàn)將其重新整理發(fā)布。 前言 寫(xiě)這篇文章的目的是經(jīng)??吹介_(kāi)發(fā)人員說(shuō):把字符串轉(zhuǎn)化為JSON對(duì)象,把JSON對(duì)象轉(zhuǎn)化成字符串等類似的話題,所以把之前收藏的一篇老外的文章整理翻譯了一下,供大家討論,如有錯(cuò)誤,...
閱讀 2906·2021-10-14 09:42
閱讀 3205·2019-08-30 15:52
閱讀 3333·2019-08-30 14:02
閱讀 1132·2019-08-29 15:42
閱讀 561·2019-08-29 13:20
閱讀 1186·2019-08-29 12:24
閱讀 508·2019-08-26 10:20
閱讀 707·2019-08-23 18:31