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

質問で説明したような動的オブジェクト構成をサポートするJavaScript言語メカニズムを探している場合は、それに役立つ3つの関連機能がObjectあります( 3つすべてにJavaScript 1.8.5が必要であることに注意してください )。

実際のデザインパターンをもっと探しているなら、あなたの質問の側面に触れるものはたくさんありますが、あなたの質問の主要なテーマであると思われるビルディングブロックアプローチに最適なデザインパターンがこれらに記述されていると思いますJavaScriptでのデザインパターンの実装に関する記事(さまざまな作成者による):

これがお役に立てば幸いです-

于 2012-05-11T08:28:52.953 に答える
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

なぜ単純に関数を定義しないのですか *次ように: *

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

シングルトンまたはモジュールパターンを使用して、コードの状態を維持し、衝突を回避できます。

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 に答える