2017-03-09 8 views
1

私は、データベースフィールドを入力するJavascriptでドメインオブジェクトを作成しています。上記の目的の両方がcraetedAtupdatedAt性質を持っている、Javascriptの継承パターン

function Dog(opt_data) { 
    var data = opt_data || {}; 

    this.createdAt = data['created_at']; 
    this.updatedAt = data['updated_at']; 
    this.name = data['name']; 
    this.breed = data['breed']; 
} 


function Cat(opt_data) { 
    var data = opt_data || {}; 

    this.createdAt = data['created_at']; 
    this.updatedAt = data['updated_at']; 
    this.name = data['name']; 
    this.fur = data['fur']; 
} 

:私は2つのオブジェクトdogcatを持っていると私は、コンストラクタ関数の定義を以下していると仮定します。だから、プロパティを持つ新しいクラスBaseModelを作成する必要がありますし、すべてのオブジェクトを継承させるか、このパターンのjavascriptの中でより良い選択肢がありますか?

アップデート1:

コメントと答えから私の理解。

function Cat(opt_data) { 
    var data = opt_data || {}; 


    this.name = data['name']; 
    this.fur = data['fur']; 

    this.updateTimestamp(data); 
} 
Cat.prototype = Object.create({ 
    updateTimestamp: function(data) { 
    this.createdAt = data['created_at'] || new Date(); 
    this.updatedAt = data['updated_at'] || new Date(); 
    } 
}); 
+1

「上記のオブジェクトの両方にcraetedAtとupdatedAtプロパティがあります」というコードは投稿していません。 –

+0

あなたが何か他のものを必要としているのでなければ、シンプルなアヒルタイピングのために行ってください。 – Bergi

+0

@Bergi私に例を教えてください。 – CodeYogi

答えて

1

createdAtupdatedAt値は、あなたがちょうどあなたがするそれらを必要とするどのような値に属性を設定し、両方のDogCatオブジェクトに定義する必要があるいくつかの一般的な支援の方法やアクセサを持っていない限り。

JavaScriptでオブジェクトメンバーを宣言していないので(C++、C#、Javaなどでのやり方)、提案したケースでBaseModelプロトタイプから継承して得られるものはありません。つまり、単にcreatedAt属性とupdatedAt属性を作成するためにJavaScriptで何もする必要がないため、基本型は実際には何も提供しませんとにかくベース型のコンストラクタです。

基本タイプが必要な場合は、データを保存して読み込むために両方のオブジェクトに同様のメソッドが必要な場合があります(保存時に自動的にupdatedAt属性を更新します)。この場合、DogCatの両方にsaveメソッドとloadメソッドを持つプロトタイプを与えることは、プロトタイプの継承パターンの有用なアプリケーションになります。

+0

同じ属性を持つオブジェクトが他にもある場合は、繰り返しコードを書くつもりはないと思いますか? – vivek

+0

@vivekこれは、既存のオブジェクトに属性を設定するヘルパー関数の場合です。プロトタイプの継承モデルは、この特定の場合には役に立たないものです。 – cdhowie

+0

@cdhowie率直に言えば、私はまだこれを頭で囲むことができず、古典的な継承モードから抜け出せないかもしれません。 – CodeYogi