2017-07-07 26 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) 

......虽然我想这是略有不同,因为你描述一个单一的笔和用构造你可以结束多个实例。