0

私はプロトタイプ構造に不慣れで、これを理解するのに苦労しています。これが私のJavaScriptコードです。

var Game = function ()
{
   //some variables
};
Game.prototype.block = 
{
    spawn: function () {
        var t1 = new this.inst;
    },
    inst : {
        x: 5,
        y: 0,
        type: ''
    }
};

新しいオブジェクト「inst」を作成しようとすると、次のエラーが発生します。TypeError:オブジェクトは関数ではありません。私は間違って何をしていますか?

4

3 に答える 3

1

オブジェクトから継承するオブジェクトを作成したい場合は、 を使用しinstてそれを行うことができます。Object.createvar t1 = Object.create(this.inst);

var Game = function () {
   //some variables
};
Game.prototype.block =  {
    spawn: function () {
        var t1 = Object.create(this.inst);
    },
    inst : {
        x: 5,
        y: 0,
        type: ''
    }
};

したがって、コードは次のようになります。

var game = new Game();

game.block.spawn();

メソッドには、.spawn()オブジェクトから継承するオブジェクトを参照する変数がありGame.prototype.block.instます。

于 2012-10-20T15:23:38.133 に答える
0

まず第一にinst、の範囲内で定義されていませんGame。したがって、thisこれは、Gameと呼ばれるプロパティを持っていませんinst。次に、コンストラクターへの呼び出しを示すためinstに続く必要がありますが、ここでは欠落しています。()

于 2012-10-20T02:35:54.430 に答える
0

新しい「inst」を作成するには、静的ファクトリ メソッドが必要です。以下のコードはあなたが必要とするものですか?Game.spawn メソッドを呼び出して新しい inst を生成し、このメソッドを setInterval に入れることができます。

function Game() {
    //some variables
}

Game.spawn = function() {
    function Inst() {
        this.x = 5;
        this.y = 0;
        this.type = '';
    }

    return new Inst;
}

var inst1 = Game.spawn();
inst1.x = 1; //test inst1
console.log(inst1.x);
var inst2 = Game.spawn();
inst2.x = 2; //test inst2
console.log(inst2.x);
var inst3 = Game.spawn();
inst3.x = 3; //test inst 3
console.log(inst3.x);
于 2012-10-20T03:20:27.423 に答える