私がやろうとしているのは、子オブジェクトに、ベースオブジェクトで定義された関数の独自の実装を提供させることです。私がこれまで理解してきた限りでは、プロトタイプはこれを行うための最良の(唯一の!)方法です。
また、私は現在ゲームエンジンTurbulenzを使用して開発していることにも注意してください。そのため、私は可能な限り彼らのスタイルに忠実に従うように努めています。エンジンでは、「クラス」/オブジェクトは次の方法で定義および作成されます。
function baseObject() { }
baseObject.prototype =
{
myMember1: 1,
myMember2: 2,
myMethod: function myMethodFn() {
return this.myMember1 + this.myMember2;
}
}
baseObject.Create = function baseObjectCreateFn
{
var o = new baseObject();
return o;
}
これにより、次のことが可能になります
var anObject = baseObject.Create();
var someValue = anObject.myMethod(); // should return 3
ここで実行できるようにしたいのは、baseObjectのすべてのプロパティを継承する新しいオブジェクトを作成すると同時に、myMethod関数を上書きして、たとえば、加算ではなく2つのメンバー値を減算できるようにすることです。
別のオブジェクトを作成してからそのプロトタイプを変更する必要があると言ったのは正しいでしょうか?私を最も悩ませているのは、baseObjectのプロトタイプの定義がオブジェクトリテラルとして定義されているため、そのメンバーの1つを上書きする構文がわからないことです。つまり、次のようになりますか?:
function childObject() {}
childObject.prototype = baseObject.Create() // would this inherit from baseObject?
// or should it be: childObject.prototype = new baseObject();
// this is the part thats confusing me as the syntax
// doesn't quite match the original base objects prototype
// syntax and I'm unsure if that will matter
childObject.prototype.myMethod = function myMethodFn() {
return this.myMember1 - this.myMember2;
}
childObject.Create = function childObjectCreateFn
{
var o = new childObject();
return o;
}
var aChildObject = childObject.Create()
var anotherValue = aChildObject.myMethod() // would this return -1 as expected?
要約すると、ベースオブジェクトから関数を継承して変更することにより、ベースオブジェクトに存在する関数を上書きするオブジェクトを作成しようとしていますが、これを行うにはどうすればよいですか?御時間ありがとうございます。