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