【问题标题】:JavaScript pen objects with replaceable nibs带有可替换笔尖的 JavaScript 笔对象
【发布时间】: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


【解决方案1】:

这听起来有点像使用构造函数。本章描述了类似的情况,但使用的是兔子而不是钢笔:http://eloquentjavascript.net/06_object.html#constructors

笔将是构造函数:

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

然后就可以创建了

var bluePen = new Pen(blue)

...虽然我猜它略有不同,因为您描述的是单支笔,并且使用构造函数最终可以得到多个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多