0

有没有一种简洁的方法来实现以下设计模式?

function a() {
    function x() { /* code */ }
    function y() { /* code */ }
    /* more code */
    x(); y(); // these can be called here
}

a();
a.x();
a.y();

我最近熟悉了原型,可能会使用这样的东西:

a = function() { }
a.prototype.x = function() { }
a.prototype.y = function() { }

但也许有更苗条的方法?由于在我的代码中a也属于其他东西的原型,即

function plugin() { ... }
plugin.prototype.a = function () {}
plugin.prototype.a.prototype.x = function () {}
plugin.prototype.a.prototype.y = function () {}
4

4 回答 4

1

为什么不使用简单地定义函数 * a像这样: *

function a( x , y){
   x();
   y();
}

并这样称呼它:

x = function(){
 // some code
}

y = function(){
 // some code
}

a(x,y);

或者像这样

a(
function(){
  // some code
},
function(){
 // some code
}

);

即使'a'属于别人的原型

你可以这样做 :-

  someOtherObj.prototype.a = function( x , y){
       x();
       y();
     }

并且在定义后或匿名调用时只需传递 x 和 y 。

于 2012-05-11T07:33:31.690 回答
1

你可以这样写:

function a() {
    this.x = function () { /* code */ }
    this.y = function () { /* code */ }
    /* more code */
    this.x(); this.y(); // these can be called here
}

var test = new a();
test.x();
test.y();
于 2012-05-11T07:40:45.323 回答
1

您可以通过使用单例或模块模式来保持代码状态并避免冲突:

var foo = function(){
  // private members
  var bar;
  baz: function(){return bar;}

  // public members go here
  return {
    getBaz: baz
  }
}();

只有您通过return上面提供的成员可用于外部范围,其余仅保留在该对象内。

有关更多设计模式的想法,请参阅:

于 2012-05-11T07:49:18.217 回答
1

如果您正在寻找支持动态对象组合的 JavaScript 语言机制,就像您在问题中描述的那样,那么有三个相关的功能Object可能会有所帮助(请注意,这三个功能都需要 JavaScript 1.8.5):

如果您正在寻找更多实际的设计模式,那么有很多涉及到您的问题的各个方面,但我相信最适合构建块方法的设计模式似乎是您问题的主要主题,在这些中进行了描述关于在 JavaScript 中实现设计模式的文章(由不同的作者撰写):

希望这会有所帮助-

于 2012-05-11T08:28:52.953 回答