摘要:類的設(shè)計(jì)模式類的設(shè)計(jì)模式實(shí)例化繼承和相對多態(tài)。,每個(gè)原型都有一個(gè)屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)。為了方便理解,這里我們簡單模擬實(shí)現(xiàn)下面介紹,另外兩種寫法行為委托設(shè)計(jì)模式委托調(diào)用簡單模擬實(shí)現(xiàn)語法可以簡潔地定義類方法
“類”的設(shè)計(jì)模式
類的設(shè)計(jì)模式:實(shí)例化、繼承和(相對)多態(tài)。
JavaScript通過原型鏈,在兩個(gè)對象之間創(chuàng)建一個(gè)關(guān)聯(lián)。這樣,一個(gè)對象就可以通過委托訪問另一個(gè)對象的屬性和函數(shù),從而達(dá)到“繼承”的實(shí)現(xiàn)。
下面來看一個(gè)例子:
function Foo(name) { this.name = name; } Foo.prototype.myName = function () { return this.name; }; function Bar(name, label) { Foo.call(this, name); this.label = label; } Bar.prototype = new Foo(); //實(shí)現(xiàn)prototype的關(guān)聯(lián) Bar.prototype.myLabel = function () { return this.label; }; var a = new Bar("a", "obj a"); a.myName(); // "a" a.myLabel(); // "obj a"構(gòu)造函數(shù)和實(shí)例原型的關(guān)系圖(紅色的就是原型鏈) 原型prototype
每個(gè)函數(shù)都有一個(gè)prototype屬性,函數(shù)的prototype屬性指向了一個(gè)對象,這個(gè)對象正是調(diào)用該構(gòu)造函數(shù)而創(chuàng)建的實(shí)例的原型。例子中Bar.prototype就是實(shí)例a的原型。
proto這是每一個(gè)JavaScript對象(除了 null )都具有的一個(gè)屬性,叫__proto__,這個(gè)屬性會指向該對象的原型。
a.__proto__ === Bar.prototype //true Bar.prototype.__proto__ === Foo.prototype //trueconstructor
constructor,每個(gè)原型都有一個(gè) constructor 屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)。
Foo === Foo.prototype.constructor為了方便理解,這里我們簡單模擬實(shí)現(xiàn)new
function objectFactory() { var obj = new Object(),Constructor = [].shift.call(arguments); obj.__proto__ = Constructor.prototype; var ret = Constructor.apply(obj, arguments); return typeof ret === "object" ? ret : obj; };
下面介紹,另外兩種寫法:
Object.create(行為委托設(shè)計(jì)模式)var Foo = { init: function(name){ this.name = name; }, myName: function(){ return this.name; } }; var Bar = Object.create(Foo); Bar.setup = function(name, label){ // 委托調(diào)用 this.init(name); this.label = label; }; Bar.myLabel = function(){ return this.label; }; var a = Object.create( Bar ); a.setup("a", "obj a"); a.myName(); // "a" a.myLabel(); // "obj a"簡單模擬實(shí)現(xiàn)Object.create
Object.create = function (o) { var F = function () {}; F.prototype = o; return new F(); };class(class 語法可以簡潔地定義類方法)
class Foo { constructor(name) { this.name = name; } myName() { return this.name; } } class Bar extends Foo { constructor(props, label) { super(props); this.label = label; } myLabel() { return this.label; } } var a = new Bar("a", "obj a"); a.myName(); // "a" a.myLabel(); // "obj a"
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97646.html
摘要:設(shè)計(jì)模式設(shè)計(jì)模式基本原則設(shè)計(jì)原則按接口而不是按實(shí)現(xiàn)來編程按接口而不是按實(shí)現(xiàn)編程是指,要將變量設(shè)置為一個(gè)抽象類或接口數(shù)據(jù)類型的實(shí)例,而不是一個(gè)具體實(shí)現(xiàn)的實(shí)例。例如父類的一個(gè)改變會逐級向下傳遞給子類實(shí)現(xiàn),這可能會影響子類使用的某個(gè)算法。 設(shè)計(jì)模式 設(shè)計(jì)模式基本原則 設(shè)計(jì)原則 ① : 按接口而不是按實(shí)現(xiàn)來編程 按接口而不是按實(shí)現(xiàn)編程是指,要將變量設(shè)置為一個(gè)抽象類或接口數(shù)據(jù)類型的實(shí)例,而不是一...
摘要:基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計(jì)是工廠方法模式的關(guān)鍵。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。工廠方法模式總結(jié)工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據(jù)抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態(tài)工廠方法...
摘要:與類型庫相比,設(shè)計(jì)模式是一個(gè)更為普遍的概念。是在年,由建筑設(shè)計(jì)大師亞力山大建筑的永恒之道描述模式是一條由三部分組成的通過規(guī)則它表示了一個(gè)特定環(huán)境一類問題和一個(gè)解決方案之間的關(guān)系。設(shè)計(jì)模式是在這方面開始探索的一塊里程碑。 設(shè)計(jì)模式并非類庫 為了方便地編寫java程序,我們會使用類庫,但設(shè)計(jì)模式不是類庫。 與類型庫相比,設(shè)計(jì)模式是一個(gè)更為普遍的概念。類庫是由程序組合...
摘要:文字有點(diǎn)長,對于不想看文字的朋友,可以去這里看視頻,視頻可能更好理解本節(jié)課,我們來學(xué)習(xí),如何創(chuàng)建一個(gè)類,也就是怎么用畫設(shè)計(jì)方案先來看一下前面課程里出現(xiàn)過的幾張?jiān)O(shè)計(jì)方案前面女媧造人的故事里,女媧創(chuàng)造了張?jiān)O(shè)計(jì)方案我們接下來根據(jù)那個(gè)故事的節(jié)奏,也 文字有點(diǎn)長,對于不想看文字的朋友,可以去這里看視頻,視頻可能更好理解https://www.piqizhu.com/v/1GK... 本節(jié)課,我...
摘要:適配器模式橋接模式過濾器模式組合模式裝飾器模式外觀模式享元模式代理模式行為型模式這些設(shè)計(jì)模式特別關(guān)注對象之間的通信。對象適配器另外一種適配器模式是對象適配器,它不是使用多繼承或繼承再實(shí)現(xiàn)的方式,而是使用直接關(guān)聯(lián),或者稱為委托的方式。 設(shè)計(jì)模式匯總 創(chuàng)建型模式 這些設(shè)計(jì)模式提供了一種在創(chuàng)建對象的同時(shí)隱藏創(chuàng)建邏輯的方式,而不是使用新的運(yùn)算符直接實(shí)例化對象。這使得程序在判斷針對某個(gè)給定實(shí)例需...
摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰?,即反射。在簡單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實(shí)例簡單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設(shè)計(jì)模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實(shí)例講解]利用反射來實(shí)現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...
閱讀 2979·2021-11-23 10:12
閱讀 2705·2021-11-23 09:51
閱讀 2052·2021-11-15 11:37
閱讀 1392·2019-08-30 15:55
閱讀 1975·2019-08-29 15:40
閱讀 1177·2019-08-28 18:30
閱讀 1658·2019-08-28 18:02
閱讀 2654·2019-08-26 12:00