【发布时间】:2017-07-07 18:37:36
【问题描述】:
我有一个 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
【问题讨论】:
-
我真的相信没有这样的模式,因为它根本不是一个好的设计。如果有的话,我会认为这是一种反模式。它在这些类之间创建了循环依赖关系(因为你说 Nib 需要访问 Pen,但为什么?),这总是一件坏事。策略模式之类的东西应该可以解决这些问题。
-
“需要访问 p1”是什么意思,通常访问是单向的,以尽可能避免循环依赖 (en.wikipedia.org/wiki/Circular_dependency)。也许这些关于 OOP 概念的想法会对您有所帮助? (adobe.com/devnet/actionscript/learning/oop-concepts/… 或stackoverflow.com/questions/2218937/…)我感觉你只是在寻找“构图”,其中 Pen 有一个 Nib,而 Nib 取决于 Pen 传递给 Nib 函数的一些信息。
-
我不确定你是在做一个奇怪的类比,还是你想在 js 中创建一支笔。您通常希望远离这种相互依赖的关系……尝试查看函数式编程和闭包。这是使用 JS 的可靠方法。使用 JS 沿着整个 OOP 路线走下去会很快变得混乱。
-
我不会说这是一个 JavaScript 问题,因为它是一个通用设计问题 - 这可能更适合 softwareengineering.stackexchange.com
-
“命名那个东西”并不是一个很好的问题。或许您可以描述一下您的具体问题?
标签: javascript object