2017-07-07 53 views
2

我有一個JavaScript問題。想象一下虛擬筆。儘管筆只能有一個筆尖,但筆可以有許多不同的可能筆尖。我想創建一個筆對象,然後爲它分配一個筆尖。筆尖需要訪問筆的屬性和方法。具有可替換筆尖的JavaScript筆對象

這可能是一個衆所周知的設計模式。這種設計模式的名稱是什麼?

function Pen() { 
    var p1=5; 
    this.nib=null; 
} 

function Nib1() { 
    // needs access to p1. 
} 

function Nib2() { 
    // needs access to p1. 
} 

var p = new Pen(); 
var n1 = new Nib1(); 
p.nib = n1; 
// n1 needs access to p1 
+1

我真的相信沒有這樣的模式,因爲它根本不是一個好設計。如果有什麼我會認爲這是一個反模式。它創建這些類之間的循環依賴關係(因爲你說Nib需要訪問Pen,但爲什麼?),這總是一件壞事。像戰略模式這樣的東西應該解決這些問題。 –

+1

「你需要訪問p1」意味着什麼,通常訪問是單向的,以儘可能避免循環依賴(https://en.wikipedia.org/wiki/Circular_dependency)。也許這些關於面向對象概念的想法會幫助你? (http://www.adobe.com/devnet/actionscript/learning/oop-concepts/composition-and-aggregation.html或https://stackoverflow.com/questions/2218937/has-a-is-a-terminology面向對象的語言) 我有一種感覺,你只是在尋找「構圖」,其中筆有一個筆尖,而筆尖則依賴於筆通過筆尖的一些信息。 –

+0

我不確定你是在做一個奇怪的比喻還是你想在js中創建一支筆。您通常希望遠離這種類型的相關關係......嘗試着看功能性編程和關閉。這是一個使用JS的可靠方法。使用JS走向整個OOP路線可能會變得非常麻煩。 –

回答

0

這聽起來有點像使用構造函數。本章描述了類似的情況,但用兔子代替筆:http://eloquentjavascript.net/06_object.html#constructors

筆會構造:

function Pen(nib) { 
    // shared scope 
    this.nib = nib; 
} 

然後您可以創建

var bluePen = new Pen(blue) 

......雖然我想這是略有不同,因爲你描述一個單一的筆和用構造你可以結束多個實例。