B.prototype.b
あなたが推測するように静的なプロパティを作成しません。彼らは、その値を上書きするまで、それはもう少し複雑よりもだ、プロトタイプを共有し、他のインスタンスとその価値に添付性質があることを意味:
var Foo = function(){
};
Foo.prototype.bar = 'bar';
var f1 = new Foo();
console.log(f1.bar); //outputs 'bar'
var f2 = new Foo();
console.log(f2.bar); //outputs 'bar'
f2.bar = 'notbar';
console.log(f2.bar); //outputs 'notbar'
console.log(f1.bar); //outputs 'bar'
唯一の方法は、「本当の」静的な性質を持つためにそれらを結合することですコンストラクタ関数自体へ:Foo
の
Foo.bar2 = 'bar2';
インスタンスがFoo.bar2
とその値にアクセスする必要があります。
var Base = function(){
};
Base.prototype.getSomething = function(){
return this.constructor.something;
};
Base.prototype.setSomething = function(value){
this.constructor.something = value;
}
var Group1 = function(){
};
Group1.prototype = new Base(); //classical inheritance
Group1.prototype.constructor = Group1;
Group1.something = 'something';
var Group2 = function(){
};
Group2.prototype = new Base(); //classical inheritance
Group2.prototype.constructor = Group2;
Group2.something = 'something else';
var g1a = new Group1();
var g1b = new Group1();
var g2a = new Group2();
var g2b = new Group2();
g1a.setSomething('whatever');
console.log(g1a.getSomething()); //outputs 'whatever'
console.log(g1b.getSomething()); //outputs 'whatever'
console.log(g2a.getSomething()); //outputs 'something else'
console.log(g2b.getSomething()); //outputs 'something else'
警告:
は、だからあなたの質問への答えは、このように、グループごとに、「サブクラス」(基本コンストラクタ関数から自分のプロトタイプを継承コンストラクタ関数)を作成し、サブクラスごとにプロパティを添付することです:
http://creynders.wordpress.com/2012/04/01/demiurge-3-types-of-javascript-inheritance-2/
グレート:
Group1.prototype = new Base();
は実際に悪い習慣ですが、私はその理由を説明しているだけで数日前に相続の3種類についてブログ記事を書きました!しかし、もし私のコンストラクタが実際に議論をしたら? –正確にはどういう意味ですか? Group1とGroup2は、引数を持つことができる通常のコンストラクタです。スーパーコンストラクタを呼び出す必要がある場合は、 'Base.call(this) 'のように直接呼び出すか、私のblogpostのように' __super__'トリックを行うことができます。 – Creynders