摘要:是個(gè)基于對(duì)象的語(yǔ)言,沒(méi)有類(lèi)的概念。而且語(yǔ)言特點(diǎn)就是松散和自由,實(shí)現(xiàn)一個(gè)同樣的功能,可以有很多種方式面向?qū)ο缶幊探^大部分都是基于類(lèi)的所以我們可以借助原型鏈繼承的方式來(lái)在中實(shí)現(xiàn)高級(jí)程序語(yǔ)言中的繼承機(jī)制關(guān)鍵點(diǎn)就是你一定要了解中的。
JavaScript是個(gè)基于對(duì)象的語(yǔ)言,沒(méi)有類(lèi)的概念。而且JavaScript語(yǔ)言特點(diǎn)就是松散和自由,實(shí)現(xiàn)一個(gè)同樣的功能,可以有很多種方式.面向?qū)ο缶幊探^大部分都是基于類(lèi)的.所以我們可以借助原型鏈繼承的方式,來(lái)在JavaScript中實(shí)現(xiàn)高級(jí)程序語(yǔ)言中的繼承機(jī)制.關(guān)鍵點(diǎn)就是你一定要了解js中的prototype。模擬ExtJS底層方法,來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的繼承機(jī)制
function extend(sub,sup){ //實(shí)現(xiàn)只繼承父類(lèi)的原型對(duì)象 //1.用一個(gè)空函數(shù)進(jìn)行中轉(zhuǎn) var F = new Function(); //2.實(shí)現(xiàn)空函數(shù)的原型對(duì)象和超類(lèi)的原型對(duì)象轉(zhuǎn)換 F.prototype = sup.prototype; //3.原型繼承 sup.prototype = new F(); //4.還原子類(lèi)的構(gòu)造器 sub.prototype.constructor = sub; //5.保存一下父類(lèi)的原型對(duì)象,一方面方便解耦,另一方面方便獲取父類(lèi)的原型對(duì)象,實(shí)現(xiàn)方法重載 sub.superClass = sup.prototype; //自定義一個(gè)子類(lèi)的靜態(tài)屬性,接收父類(lèi)的原型對(duì)象 //6.判斷父類(lèi)原型對(duì)象的構(gòu)造器 if(sup.prototype.constructor == Object.prototype.constructor){ sup.prototype.constructor = sup; //手動(dòng)還原父類(lèi)對(duì)象的構(gòu)造器 } } function Person(name,age){ this.name = name; this.age = age; } Person.prototype = { constructor: Person, //還原構(gòu)造器,這里其實(shí)可以不用還原,因?yàn)樵趀xtend方法中已經(jīng)實(shí)現(xiàn)了 sayHello: function(){ alert("hello world!"); } } function Boy(name,age,sex){ //綁定父類(lèi)函數(shù)模版,實(shí)現(xiàn)構(gòu)造函數(shù)繼承,只復(fù)制了父類(lèi)的模版 Boy.superClass.constructor.call(this,name,age); this.sex = sex; } extend(Boy,Person); //給子類(lèi)添加一個(gè)原型對(duì)象方法 Boy.prototype.sayHello = function(){ alert("hello,javascript"); } Boy.superClass.sayHello.call(b); //實(shí)現(xiàn)方法重載,調(diào)用父類(lèi)的方法 var b = new Boy("z3",20,"nan"); alert(b.name); alert(b.sex); b.sayHello(); //調(diào)用子類(lèi)重載的方法
轉(zhuǎn)摘自我的博客:ExtJS底層繼承機(jī)制實(shí)現(xiàn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85714.html
摘要:介一回,偶們來(lái)聊一下用中的類(lèi),有些盆友可能用過(guò)或者的,知道語(yǔ)法糖,可是在中并沒(méi)有,中需要用到構(gòu)造函數(shù)來(lái)模擬類(lèi)。而且要注意一點(diǎn),構(gòu)造函數(shù)沒(méi)有語(yǔ)句,是自動(dòng)返回。 本回內(nèi)容介紹 上一回聊到JS的Function類(lèi)型,做了柯里化,數(shù)組去重,排序的題。 介一回,偶們來(lái)聊一下用JS中的類(lèi),有些盆友可能用過(guò)ES6或者TypeScript的,知道Class語(yǔ)法糖,可是在ES5中并沒(méi)有,ES5中需要用到...
摘要:?jiǎn)栴}是解決了,但引發(fā)我猜想,我最初是以為多線(xiàn)程的原因,不然不能解釋這個(gè)現(xiàn)象程序肯定沒(méi)有順序執(zhí)行。雖說(shuō)現(xiàn)在已經(jīng)有了多線(xiàn)程,但現(xiàn)在沒(méi)用到,就不在記錄之列了參考鏈接異步編程阮一峰 緣起 在項(xiàng)目中用到了extjs做后臺(tái)頁(yè)面展示,當(dāng)時(shí)寫(xiě)了一個(gè)product 模塊,在新增窗口里放了一個(gè)card布局器,里面有不同的表單,當(dāng)然新增窗口還有保存,重置,關(guān)閉這三個(gè)按鈕。 當(dāng)時(shí)在保存時(shí)寫(xiě)了下面代碼: ...
摘要:構(gòu)造函數(shù)用于檢測(cè)給定的屬性在當(dāng)前對(duì)象實(shí)例中而不是原型中是否存在。返回對(duì)象的字符串表示。實(shí)現(xiàn)空函數(shù)的原型對(duì)象和超類(lèi)的原型對(duì)象轉(zhuǎn)換原型繼承做善后處理。判斷父類(lèi)的原型對(duì)象的構(gòu)造器,防止簡(jiǎn)單原型中給更改為還原父類(lèi)原型對(duì)象的構(gòu)造器 類(lèi)的創(chuàng)建于實(shí)例對(duì)象 工廠(chǎng)模型創(chuàng)建對(duì)象 function CreatePerson ( name,sex,age ) { var obj = new ...
摘要:數(shù)據(jù)讀取器相當(dāng)于原始數(shù)據(jù)格式與標(biāo)準(zhǔn)數(shù)據(jù)格式之間的橋梁,它屏蔽了原始數(shù)據(jù)格式不同對(duì)程序開(kāi)發(fā)造成的影響。零是有效的,但空字符串無(wú)效。 用了Extjs快一年了,這里整理一下model。 數(shù)據(jù)模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中數(shù)據(jù)包總共包含了40多個(gè)類(lèi),其中有三個(gè)類(lèi)比其他類(lèi)有更重要的地位,它們分別是:model、st...
摘要:上篇實(shí)現(xiàn)了基本的代碼架構(gòu),控制器動(dòng)態(tài)加載功能以及一個(gè)基礎(chǔ)的頁(yè)面布局,本節(jié)開(kāi)始,將陸續(xù)完善這個(gè)頁(yè)面。頁(yè)面底部區(qū)域,主要顯示版權(quán)信息等,也可以顯示個(gè)時(shí)間啥的。。。頭部和底部定義完畢后,需要在中引入對(duì)應(yīng)位置。 上篇實(shí)現(xiàn)了基本的代碼架構(gòu),控制器動(dòng)態(tài)加載功能以及一個(gè)基礎(chǔ)的頁(yè)面布局,本節(jié)開(kāi)始,將陸續(xù)完善這個(gè)頁(yè)面。 目標(biāo) 如前所述,我們的頁(yè)面包含這么幾個(gè)區(qū)域: header: UI頂部區(qū)域,顯示系...
閱讀 2577·2021-10-25 09:45
閱讀 1239·2021-10-14 09:43
閱讀 2297·2021-09-22 15:23
閱讀 1519·2021-09-22 14:58
閱讀 1934·2019-08-30 15:54
閱讀 3539·2019-08-30 13:00
閱讀 1354·2019-08-29 18:44
閱讀 1571·2019-08-29 16:59