したがって、次のコンストラクター関数があり、そのプロトタイプを次のように変更したとします。
function foo(options) {
this.propA_ = 'whatever';
this.propB_ = 'something';
this.propC_ = options.stuff;
this.randomMethod = function omg() {
/*code etc etc etc*/
}
}
foo.prototype.p1 = 1;
foo.prototype.p2 = 2;
foo を作成した後、新しいコンストラクター bar() を作成します。これは一種のスーパー foo のようなものです。これには、foo のすべてのプロパティ、プロトタイプ情報、メソッドがありますが、追加のプロパティとメソッドもいくつかあります。上にふりかけた。次のコードは、これを行うための最もエレガントな方法でしょうか?
function foo(options) {
this.propA_ = 'whatever';
this.propB_ = 'something';
this.propC_ = options.stuff;
this.randomMethod = function omg() {
/*code etc etc etc*/
}
}
foo.prototype.p1 = 1;
foo.prototype.p2 = 2;
function bar(options) {
this = foo(options);
this.propD_ = 'yet another thing';
this.propE_ = options.moreStuff;
}
bar.prototype.p3 = 3;
foo.prototype.testing = 'A test';
smallObj = foo()'
bigObj = bar();
そのコードを実行した後、これが私が期待するものです
console.log(a.p3); //3
bigObj.p2 = 100;
console.log(bigObj.p2); //100
console.log(foo.prototype.p2); //2
console.log(bigObj.randomMethod()); //Will work
console.log(smallObj.p3); //undefined
console.log(smallObj.propA_); //'whatever'
console.log(bigObj.propA_); //'whatever'
foo.prototype.propA_ = 'something totally different'
console.log(bigObj.propA_); //'something totally different'
これは、ある種の「Foo Plus」を作成するために、既存のコンストラクターの機能を「拡張」する正しい方法ですか。基本的に、foo は bar() が登場する前とまったく同じように機能し続けたいと思いますが、bar は foo の上に追加されるプロパティとメソッドのセットである必要があります。私はこれを正しく行っていますか?