摘要:被克隆的對(duì)象稱之為新對(duì)象的原型,新對(duì)象保存一個(gè)指向其原型的引用。一個(gè)對(duì)象是如何與其原型聯(lián)系起來的呢答對(duì)象的屬性指向其構(gòu)造函數(shù)的。如何實(shí)現(xiàn)繼承呢使構(gòu)造函數(shù)的等于另一個(gè)構(gòu)造函數(shù)的一個(gè)實(shí)例這樣就使得繼承于。
眾所周知,在javascript這門動(dòng)態(tài)類型語(yǔ)言中,是不存在如傳統(tǒng)靜態(tài)類型語(yǔ)言如c++或java中對(duì)類的支持的。后者是天生為面向?qū)ο缶幊潭O(shè)計(jì),其中涉及的一些概念如繼承、多態(tài)、函數(shù)重載在js中都不是被原生實(shí)現(xiàn)的。
然而,js也是可以實(shí)現(xiàn)面向?qū)ο缶幊痰?,一切都?xì)w功于其原型編程范形特性。也就是說,一切數(shù)據(jù)類型都可以被看做是對(duì)象(js中還存在Number,String,Boolean這樣的基本數(shù)據(jù)類型),要產(chǎn)生一個(gè)對(duì)象,不是通過用類進(jìn)行實(shí)例化,而是克隆另一個(gè)對(duì)象。被克隆的對(duì)象稱之為新對(duì)象的原型,新對(duì)象保存一個(gè)指向其原型的引用。當(dāng)調(diào)用新對(duì)象中的某個(gè)屬性時(shí),如果不存在,則會(huì)順著原型鏈一直往上查找,直達(dá)Object.prototype這個(gè)js中的根對(duì)象為止,如不存在則為undefined。
注:js中的所有對(duì)象都是直接或者間接克隆Object.prototype, 這是一個(gè)空對(duì)象。
那么如何克隆/產(chǎn)生一個(gè)對(duì)象呢?
答: 在js中可以通過new func()的形式,這里的func是一個(gè)function,但這里并不作為普通的函數(shù)調(diào)用,而是作為一個(gè)構(gòu)造器。而這個(gè)函數(shù)就是通過這個(gè)函數(shù)構(gòu)造出來的對(duì)象的構(gòu)造函數(shù)。
一個(gè)對(duì)象是如何與其原型聯(lián)系起來的呢?
答:對(duì)象的__proto__屬性指向其構(gòu)造函數(shù)的prototype。
例如,var obj = new Object(); 那么就存在 obj.__porto__ === Object.prototype。
如何實(shí)現(xiàn)繼承呢?
(1)使構(gòu)造函數(shù)A的prototype等于另一個(gè)構(gòu)造函數(shù)B的一個(gè)實(shí)例(A.prototype = new B() ),這樣就使得A繼承于B。
(2)使用apply方法,使B函數(shù)能夠借用A函數(shù):
var A = function( name ){ this.name = name; }; var B = function(){ A.apply( this, arguments ); }; B.prototype.getName = function(){ return this.name; }; var b = new B( "xiao" ); console.log( b.getName() );
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80761.html
摘要:理解的函數(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 的值到底...
摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊?,否則只會(huì)讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識(shí)只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:什么是里氏替換原則某個(gè)對(duì)象實(shí)例的子類實(shí)例應(yīng)當(dāng)可以在不影響程序正確性的基礎(chǔ)上替換它們。除了在編程語(yǔ)言層面,在前端實(shí)際工作中,你可能會(huì)聽到一個(gè)叫作的概念,這個(gè)概念我認(rèn)為也是里氏替換原則的一直延伸。 這是理解SOLID原則,關(guān)于里氏替換原則為什么提倡我們面向抽象層編程而不是具體實(shí)現(xiàn)層,以及為什么這樣可以使代碼更具維護(hù)性和復(fù)用性。 什么是里氏替換原則 Objects should be rep...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...
閱讀 3273·2021-11-10 11:35
閱讀 1473·2019-08-30 13:20
閱讀 1173·2019-08-29 16:18
閱讀 2204·2019-08-26 13:54
閱讀 2214·2019-08-26 13:50
閱讀 1008·2019-08-26 13:39
閱讀 2553·2019-08-26 12:08
閱讀 2006·2019-08-26 10:37