2015-10-29 8 views
8

私はまだ勉強していますが、最近私はWeb開発に取り組みたい分野を変更しました。だからプログラミングは私には新しいものではありませんが、私は実際にJavaScriptを二度見たことはありません。OLOOパターンの明確化

私は早く習得しようとしていますが、私はjavascriptで使用されているさまざまな継承パターンについて混乱しています。 .prototypeリファレンスがプログラマによって設定されている古典的なプロトタイプチェーンを調べました(これは一般的にプロトタイプパターンと呼ばれています)。 その後、OLOOについてのブログや記事、シンプルさに関する利点をたくさん読んでいました。

私は小さなサンプルを自分でコーディングしようとしましたが、良いアプローチを研究しているうちに、私はこれらの2つのカテゴリのいずれにも入れられないコードを作りました。

私は1つを見ていたい場合はフィドルを作った:うまくいけば、誰かがそれは私がここでやったが何であるかを明確にすることができます

function Parent() { 
    return { 
     array: [], 

     add: function(element) { 
      this.array.push(element + this.array.length.toString()); 
     }, 

     getAll: function() { 
      return this.array; 
     }, 
    }; 
}; 

function Child() { 
    return Object.assign(Parent(), { 

     removeAllButOne: function() { 
      this.array.splice(1); 
     } 
    }); 
}; 

foo = Parent(); 
foo.add('foo'); 

bar = Child(); 
bar.add('bar'); 

foo.add('foo'); 
bar.add('bar'); 
bar.removeAllButOne(); 

と:誰のために http://jsfiddle.net/HB7LU/19377/

を、これは基本的に私のコードですこの方法を使用して直面する短所OLOOは新しいオブジェクトを作成するために単純なObject.create(...); に依存しているため、OLOOにすることはできません。

EDIT:リンクはフィドルするが壊れていた、何をやって申し訳ありません

+0

あなたは角の例に行きます。それはインテントですか?そして、そこに欠けていることは、ng-app宣言です) – kwoxer

+0

リンクは実際にAngularJSの例に行きます。私はこれが人々を混乱させないことを願っています。リンクは意図したとおりに動作するはずです.HTMLドキュメント全体を見ることができないので、必要なアプリケーションはありません。少なくとも私が作ったのはそのような仕組みだった。 – swent

+0

それは2015年外です:あなたはES2015からjavascriptクラスを使用することができます – zerkms

答えて

6

は多少のmixinパターンのようなものです。新しいParentオブジェクトを作成し、それを部分的に混合オブジェクトの背後にある考えのChildオブジェクトにマージします。ここで

ミックスインのいくつかの参照されています

A Fresh Look at Javascript Mixins

The Mixin Pattern

JavaScript Mixins: Beyond Simple Object ExtensionPosted

ここでは何をやっているのいくつかの欠点です:

  1. あなたが作成Parentインスタンスからコピーしてからそれを投げ捨てます。 Parent.prototype
  2. 任意の方法が
  3. instanceof Parent
  4. をサポートされません を継承することはない、それは全体の状態をコピーしないように instanceof Childが列挙、独自のプロパティ

Object.assign()コピーのみをサポートされません

  • Parentオブジェクトであるため、親オブジェクトにコピーされないものがないことが明示的にわかっている場合にのみ使用できます。

  • +0

    あなたの答えを読んでいる間、それはすべて意味があります。ご協力いただきありがとうございます。これは私のために別の問題を投げるが、私はこれについて新しい質問を始めるべきだと思う?またはフォローアップを投稿してもよろしいですか? – swent