摘要:學(xué)習(xí),總繞不開原型,原型鏈,繼承等等這些知識。對象那么好,怎么才能找一個呸,其實是創(chuàng)建創(chuàng)建對象的方法對象字面量工廠模式構(gòu)造函數(shù)模式原型模式等。原型鏈有什么用來談?wù)劺^承,繼承可以利用構(gòu)造函數(shù),使用屬性等來實現(xiàn)。
初學(xué)者學(xué)習(xí)javascript可能會感覺很困擾,但是你一旦真正了解了它,我相信你會愛上它。學(xué)習(xí)ECMAScript,總繞不開原型,原型鏈,繼承等等這些知識。今天把它們放在一塊兒,首先把理解他們作為小目標(biāo),構(gòu)建一個完備的結(jié)構(gòu)。不要眼高手低,我們一步一步來理解。
從對象的開始1.何為對象?對象是數(shù)據(jù),這個數(shù)據(jù)擁有屬性和方法,有可以進(jìn)行封裝和繼承等等的特點。
2.何為面向?qū)ο缶幊蹋棵嫦驅(qū)ο缶幊淌且粋€使用一系列的對象進(jìn)行協(xié)作,從而靈活高效地解決復(fù)雜問題的編程思想。
創(chuàng)建對象的方法:對象字面量、工廠模式、構(gòu)造函數(shù)模式、原型模式等。
前面三個暫且不看,他們的短板大家應(yīng)該都知道。主要來看如何用原型模式創(chuàng)建一個對象。
來個看爛了的例子,把一個“人”作為對象,盡情地創(chuàng)建吧:
function Person(){ } Person.prototype.name = "程流流";//是的,我的名字 Person.prototype.age = 21; Person.prototype.job = "大學(xué)生"; Person.prototype.sayName = function(){ alert(this.name); }; var person1 = new Person(); person1.sayName(); //"程流流" var person2 = new Person(); person2.sayName(); //"程流流" alert(person1.sayName == person2.sayName); //true
例子雖然簡單,但是內(nèi)容豐富,來解剖一下:
這個例子里面有構(gòu)造函數(shù),原型對象,實例對象, prototype
屬性,constructor屬性,_proto_屬性,很豐富吧。關(guān)于他們之間的關(guān)系,我學(xué)習(xí)的時候很容易弄混掉(因為我大腦不夠聰慧,這個沒辦法),但是有天上課的時候突然就想明白了,然后就寫在了書上。看圖:
是不是很簡單,明白了他們都是什么以及之間的關(guān)系后我們進(jìn)行到下一步...
原型鏈原型鏈?zhǔn)且粭l鏈。我們前面利用構(gòu)造器(就是constructor)創(chuàng)建了新對象,新對象都有prototype屬性,而我們new出來的新實例對象有默認(rèn)的一個只想構(gòu)造器原型(原型對象)的內(nèi)部指針_proto_,那個原型prototype它也是個對象,它也有自己的原型,原型對象又包含一個指向另一個原型的指針,相應(yīng)地,另一個原型中也包含著一個指向另一個構(gòu)造函數(shù)
的指針。假如另一個原型又是另一個類型的實例,那么上述關(guān)系依然成立,如此層層遞進(jìn),就構(gòu)成了實例與原型的鏈條。
來談?wù)?strong>繼承,繼承可以利用構(gòu)造函數(shù),使用prototype屬性等來實現(xiàn)。原型繼承主要就是用原型鏈來實現(xiàn),怎么個繼承法呢?就是利用原型讓一個引用類型來繼承另一個引用類型的屬性和方法。
記得上面的草圖吧,我來畫一個好看點的:
看到了嗎,沿著原型鏈一環(huán)一環(huán)的繼承。
初學(xué)者看到這里相信已經(jīng)對面向?qū)ο缶幊逃嘘P(guān)的重要概念有了一定理解,下一篇來談一談有關(guān)閉包的知識。第一次寫文章,文筆太差,也沒有高深的技術(shù)在里面,如果幫助初學(xué)者理清了思路,我的目的就達(dá)到了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88453.html
摘要:為什么要學(xué)習(xí)設(shè)計模式做事情之前問個為什么總是好的。設(shè)計模式的使用方法關(guān)于使用方式,像我這種初學(xué)者最容易犯的錯誤就是生搬硬套,但是模仿本來也是學(xué)習(xí)的一個過程,最重要的事情是在模仿中要學(xué)會思考。 為什么要學(xué)習(xí)設(shè)計模式? 做事情之前問個為什么總是好的。關(guān)于設(shè)計模式的好壞,我在知乎上也看過一些討論,有知友對其提出過一些疑問,里面有一些關(guān)于設(shè)計模式的觀點: 設(shè)計模式有何不妥,所謂的荼毒體現(xiàn)在哪...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街校瑢ο髣t是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長期以來人們對這一門語言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣鳌1疚膶⒒貧w面向?qū)ο蟊疽猓瑥膶φZ言感悟的角度闡述為什...
摘要:并沒有類繼承模型,而是使用原型對象進(jìn)行原型式繼承。我們舉例說明原型鏈查找機(jī)制當(dāng)訪問一個對象的屬性時,會從對象本身開始往上遍歷整個原型鏈,直到找到對應(yīng)屬性為止。原始類型有以下五種型。此外,試圖查找一個不存在屬性時將會遍歷整個原型鏈。 Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進(jìn)行原型式繼承。 盡管人們經(jīng)常將此看做是 Javascript 的一個缺點,然...
摘要:第一部分請點擊快速掌握面試基礎(chǔ)知識一關(guān)鍵字如果使用關(guān)鍵字來調(diào)用函數(shù)式很特別的形式。該對象默認(rèn)包含了指向原構(gòu)造函數(shù)的屬性。接下來通過例子來幫助理解屬性包含了構(gòu)造函數(shù)以及構(gòu)造函數(shù)中在上定義的屬性。也就是說,的回調(diào)函數(shù)后執(zhí)行。 譯者按: 總結(jié)了大量JavaScript基本知識點,很有用! 原文: The Definitive JavaScript Handbook for your next...
閱讀 1510·2021-11-22 13:52
閱讀 1324·2021-09-29 09:34
閱讀 2723·2021-09-09 11:40
閱讀 3042·2019-08-30 15:54
閱讀 1270·2019-08-30 15:53
閱讀 982·2019-08-30 11:01
閱讀 1371·2019-08-29 17:22
閱讀 1965·2019-08-26 10:57