摘要:寫一個(gè)我最近遇到的例子來直觀的理解文件中的創(chuàng)建新類需要的配置項(xiàng)缺失定義類時(shí)繼承的類的配置項(xiàng)缺失此時(shí)的對(duì)象數(shù)據(jù)結(jié)構(gòu)見下圖,可以直觀觀察出和的區(qū)別小白和老鳥,或者叫孫子和爺爺也可以。
真正的prototype與__proto__的區(qū)別,在于prototype原始類設(shè)計(jì)者,也就是說,原始類設(shè)計(jì)人員需要對(duì)prototype進(jìn)行一系列操作,而__proto__則是二次開發(fā)人員,比如我var app = new Vue(),我想要為Vue實(shí)例添加一個(gè)方法,就要用app.__proto__,而app.prototype只有尤雨溪才有權(quán)限去修改。
顯式原型:prototype
隱式原型:__proto__
可以形象地抽象成2類人:
prototype:小白,個(gè)性張揚(yáng),飛揚(yáng)跋扈,大張旗鼓,做事生怕天下人都不知道。
__proto__:老鳥,個(gè)性沉穩(wěn),深藏功名,暗度陳倉(cāng),做事最親近的人都不告訴。
至于為什么,看了下文就能略知一二!
其實(shí)從字面意思就可以看出兩者區(qū)別。
顯式:明顯的,表現(xiàn)出來的,顯示出來的,當(dāng)前文件中肉眼可以看見的
隱式:隱藏的,沒有表現(xiàn)出來的,隱藏起來的,當(dāng)前文件中肉眼看不到的
原型:原型是Javascript繼承中的核心,通過對(duì)原型鏈從最上層向最下層進(jìn)行查找,來實(shí)現(xiàn)方法的調(diào)用。
寫一個(gè)我最近遇到的例子來直觀的理解:
html文件中的script:
var myProgressOne = new mProgress(); var myClickCallback = function(params){ console.log(params); }
創(chuàng)建新mProgress類需要的script:
var mProgress = function(){ }; mProgress.prototype = $.extend( new MCBASE(), { version:"0.0.1", template :"" + "", defaultOption : { "colors":[], "data": [], }, setDom: function( dom ){ this.wrap = this._setDom( dom ); if( !this.wrap ){ console.log("配置項(xiàng)缺失"); return false; } }, ... }
定義mProgress類時(shí)繼承的類的script:
var MCBASE = function(){ this.version = "0.0.1"; }; MCBASE.prototype = { _getMod : function( ){ return this; }, _setDom : function( dom ){ if( !dom || !dom.length ){ console.log("配置項(xiàng)缺失"); return null; } }, _formateLargeData : function( largeData, fixed ){ } ... };
此時(shí)的對(duì)象數(shù)據(jù)結(jié)構(gòu)見下圖,可以直觀觀察出prototype和__proto__的區(qū)別:
小白和老鳥,或者叫孫子和爺爺也可以。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83448.html
摘要:執(zhí)行構(gòu)造函數(shù)的一步說明對(duì)象可以通過函數(shù)來創(chuàng)建。是最頂級(jí)的構(gòu)造函數(shù),對(duì)象里面,就有好幾個(gè)其他屬性。構(gòu)造函數(shù)與普通函數(shù)并沒有區(qū)別,只是調(diào)用方式不同。 主要問題:1、構(gòu)造函數(shù)和普通函數(shù)有區(qū)別么?什么區(qū)別?2、prototype和__proto__有什么不同?3、instanceof的作用機(jī)制,為什么有限制?4、ES6的相關(guān)方法,Class繼承原理? 三、對(duì)象與原型 (一)、數(shù)據(jù)類型 Js...
摘要:模式工廠模式構(gòu)造器模式通過對(duì)象實(shí)現(xiàn)模式構(gòu)造器與原型方式的混合模式動(dòng)態(tài)原型模式混合工廠模式模式字面量的表現(xiàn)形式等價(jià)于即以對(duì)象為一個(gè)原型模板新建一個(gè)以這個(gè)原型模板為原型的對(duì)象區(qū)別創(chuàng)建一個(gè)原型為的對(duì)象在里查看各個(gè)新建對(duì)象的區(qū)別可以看出前種模式創(chuàng)建 Objct 模式 工廠模式 構(gòu)造器模式 通過 Function 對(duì)象實(shí)現(xiàn) prototype 模式 構(gòu)造器與原型方式的混合模式 動(dòng)態(tài)原型模式 混...
摘要:在規(guī)范中,引入了的概念。使用中的聲明一個(gè)類,是非常簡(jiǎn)單的事。中面向?qū)ο髮?shí)例化的背后原理,實(shí)際上就是原型對(duì)象。與區(qū)別理解上述原理后,還需要注意與屬性的區(qū)別。實(shí)際上,在中,類繼承的本質(zhì)依舊是原型對(duì)象。 在 ES6 規(guī)范中,引入了 class 的概念。使得 JS 開發(fā)者終于告別了,直接使用原型對(duì)象模仿面向?qū)ο笾械念惡皖惱^承時(shí)代。 但是JS 中并沒有一個(gè)真正的 class 原始類型, clas...
摘要:中有基本類型和復(fù)雜類型的區(qū)分。原型與原型鏈這里,就引入了兩個(gè)新的概念。原型對(duì)象就是用來存放聲明對(duì)象中共有的那部分屬性。而原型對(duì)象自身也是一個(gè)對(duì)象,它也有自己的原型對(duì)象。這樣層層上溯,就形成了一個(gè)類似鏈表的結(jié)構(gòu),這就是原型鏈。 JavaScript中有基本類型和復(fù)雜類型的區(qū)分。 當(dāng)我們?cè)诼暶饕粋€(gè)基本類型時(shí): var n1= 1; console.log(n1); //1 這時(shí)我們可以用N...
摘要:事后整理當(dāng)時(shí)的思路如下簡(jiǎn)約版第一步是對(duì)象,對(duì)象都有原型也叫原型指針,指向構(gòu)造函數(shù)的原型對(duì)象。第二步是構(gòu)造函數(shù),構(gòu)造函數(shù)也是函數(shù),函數(shù)除了有原型對(duì)象外,也有原型指針。第四步作為中的內(nèi)建構(gòu)造函數(shù),同樣擁有原型指針和原型對(duì)象。 前段時(shí)間求職過程中,經(jīng)常會(huì)被問到關(guān)于原型和原型鏈,就問題本身而言并不難,主要是考察對(duì)JavaScript基本概念的理解,但如何能夠說明白確實(shí)需要認(rèn)真準(zhǔn)備下。 我印象比...
閱讀 1992·2021-11-22 14:45
閱讀 2612·2021-10-12 10:11
閱讀 776·2021-09-22 10:02
閱讀 1233·2019-08-30 15:55
閱讀 1147·2019-08-30 15:54
閱讀 3258·2019-08-30 15:54
閱讀 1196·2019-08-29 17:16
閱讀 3093·2019-08-28 17:55