3

パラメータを渡す他のオブジェクトを使用して作成しながら、新しいJSオブジェクトを拡張したいと思います。動的パラメータなしでオブジェクトを拡張することしかできないため、このコードは機能しません。

otherObject = function(id1){
    this.id = id1;
};

otherObject.prototype.test =function(){
    alert(this.id);
};

testObject = function(id2) {
    this.id=id2;
};

testObject.prototype = new otherObject("id2");/* id2 should be testObject this.id */


var a = new testObject("variable");
a.test();

なにか提案を?

4

4 に答える 4

5

明らかな構文エラーは別として、JavaScriptの正しい継承方法は次のとおりです。

// constructors are named uppercase by convention
function OtherObject(id1) {
    this.id = id1;
};
OtherObject.prototype.test = function() {
    alert(this.id);
};

function TestObject(id2) {
    // call "super" constructor on this object:
    OtherObject.call(this, id2);
};
// create a prototype object inheriting from the other one
TestObject.prototype = Object.create(OtherObject.prototype);
// if you want them to be equal (share all methods), you can simply use
TestObject.prototype = OtherObject.prototype;


var a = new TestObject("variable");
a.test(); // alerts "variable"

これに関するチュートリアルはWeb上にたくさんあります。

于 2012-07-23T14:10:24.577 に答える
0

私はあなたが何を望んでいるのか正確にはわかりませんが

otherObject.prototype.test = function () { 
    alert(this.id); 
}; 

正しいでしょう。

この

testObject.prototype = new otherObject(id2);

以前にid2が設定されていないと機能しません。

次を試してください

   var OtherObject = function () {
   }
   OtherObject.prototype.test = function () {
       alert (this.id);
   }

   var TestObject = function (id) {
       this.id = id;
   }
   TestObject.prototype = new OtherObject ();

   var a = new TestObject("variable");
   a.test ();
于 2012-07-23T14:06:20.243 に答える
0

コードを修正しました

otherObject = function(id1){
    this.id = id1;
};

otherObject.prototype.test =function(){
    alert(this.id);
};

testObject = function(id2) {
    this.id=id2;
};

testObject.prototype = new otherObject("id2");/* id2 should be testObject this.id */


var a = new testObject("variable");
a.test();
于 2012-07-23T14:06:46.273 に答える
0
testObject = function(id2) {
    otherObject.call(this, id2); // run the parent object constructor with id2 parameter
    this.id=id2;
};

testObject.prototype = new otherObject(); // no id2 parameter here, it doesn't make sense

のインスタンスを作成している間testObject、のコンストラクターがotherObject2回呼び出されることに注意してください。1回はプロトタイプの作成、もう1回はオブジェクトの初期化です。

重複した初期化を防ぐために、プロトタイプの作成にのみ使用している場合は、コンストラクターをすぐに停止できます。

otherObject = function(id1){
    if (typeof id1 == 'undefined') {
        /* as there is no parameter, this must be the call used to create
         * the prototype. No initialisation needed here, we'll just return.
         */
        return;
    }
    this.id = id1;
};

PSオブジェクトにはキャメルケースを使用してください。

于 2012-07-23T14:11:37.597 に答える