2017-11-28 5 views
0

複数のインスタンスのプロパティ/メソッドを共有する方法を理解するのにいくつかの困難があります。JavaScript - 複数のインスタンス間でプロパティを継承する

インスタンスの新しいオブジェクトObject.create()を作成してプロパティを継承することは可能です。しかし、それは複数の(子)インスタンス間で共有できない新しいオブジェクトを作成します。

私の目的は、プロパティとヘルパーメソッドを保持するParent関数を作成することです。また、このプロパティ/メソッドは、子関数間で共有する必要があります。子(または親)メソッドがプロパティを変更する場合、それはアクセス可能であり、すべてのインスタンス(親/子)に反映される必要があります。

どのようにこのような動作を実現できますか?ここで

(ない私が欲しいものである)古典の継承の例が、私は達成したいの原則を示しています

// File 1 - Parent 
var Parent = function() { 
    this.var1 = 'var1'; 
    this.var2 = 'var2'; 
}; 

Parent.prototype.setVar = function(name, arg) { 
    this[name] = arg 
}; 

Parent.prototype.getVar = function(name) { 
    return this[name]; 
}; 

// File 2 - Child 1 
var Child1 = function() { 
    Parent.call(this); 
}; 

Child1.prototype = Object.create(Parent.prototype); 
Child1.prototype.constructor = Child1; 

Child1.prototype.print = function() { 
    this.setVar('var1', 'test var 1'); 
    this.setVar('var2', 'test var 2'); 
    console.log(this.var1, this.var2) 
}; 

// File 3 - Child 2 
var Child2 = function() { 
    Parent.call(this); 
}; 

Child2.prototype = Object.create(Parent.prototype); 
Child2.prototype.constructor = Child2; 

Child2.prototype.print = function() { 
    console.log(this.var1, this.var2) 
}; 

var Child1 = new Child1(); 
var Child2 = new Child2(); 
Child1.print(); // test var 1 test var 2 
Child2.print(); // var1 var2 

/*** => How to share/inherit the variables from Parent in all children (Child1, Child2, etc...) 
Child1.print(); // test var 1 test var 2 
Child2.print(); // test var 1 test var 2 
***/ 

フィドル:https://jsfiddle.net/guL2ahpq/たぶん

私は非常に遠くコンセプトのよを探しています。 誰かが簡単に私が探しているものを達成する方法を説明できることを願っています。また、あなたは上でこれらの変数を設定することができJS https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS

+0

JSは '共有プロパティ'(プロトタイプチェーンから)を読み取ることができますが、書き込み時には常にローカルプロパティを作成します。 – Dormilich

+0

はい、わかっています。しかし、どこの場所でも更新できる同じプロパティをすべてのインスタンスにわたって共有するためにコードを実装する方法はありますか? OOPでこれを達成する方法はありますか? – freaky

+0

共有プロパティを更新することはできません。それがJSの仕組みです。 – Dormilich

答えて

1

をオブジェクト指向についての章があります https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance

を:私はここに例を確認してください

+0

ありがとうございます。静的なプロパティの例がありますか? – freaky

+0

'Parent'または' mySingleton'や 'Parent.prototype'の代わりにそれらを保存するだけです。そして、 'print'メソッドで' this'を通してそれらにアクセスしませんが、そのオブジェクトに対しては明示的にアクセスしないでください。 – Bergi

-1

...私はOOPでの知識のいくつかの欠如を持っていると思いますすべてのインスタンスが継承することをParentのプロトタイプオブジェクト:もちろん

function Parent() {} 
Parent.prototype.var1 = 'var1'; 
Parent.prototype.var2 = 'var2'; 
Parent.prototype.setVar = function(name, arg) { 
    Parent.prototype[name] = arg 
}; 

これはほとんど使われないパターンであるとconfusioの多くにつながりますn。インスタンスに変更可能な共有プロパティを設定しないでください。グローバル変数、または静的プロパティーParentを使用するだけで同じ結果を得ることができます。

関連する問題