1

私は以下のようなオブジェクトを持っています

 function obj() {

     this.cellSize = 50;

     this.createBlock = function() { // creates a block object
        this.x = 0;
        this.y = 0 - (this.cellSize * 1.5);
        this.baseVelocity = 1;
        this.velocity = this.baseVelocity;
        return this;
    };

    this.activeBlock = this.createBlock(); // active block object

    this.nextBlock = this.createBlock(); // next block object
 }

チェックするobj.activeBlockと、返されるオブジェクトが取得されていませんobj.createBlockか?

ありがとう、

4

1 に答える 1

2

おそらく次のようなものが必要です。

function obj() {
     var that = this;
     this.cellSize = 50;

     this.createBlock = function() { // creates a block object
        this.x = 0;
        this.y = 0 - (that.cellSize * 1.5);
        this.baseVelocity = 1;
        this.velocity = this.baseVelocity;
        return this;
    };

    this.activeBlock = new this.createBlock(); // active block object

    this.nextBlock = new this.createBlock(); // next block object
}

関数のthisは のcreateBlockとは異なる必要がthisありobj()ます。newまた、各ブロックを使用して新しいオブジェクトを作成する必要があります。cellSizeが定数であると思われる場合は、コードをクロージャーとして書き直すことができます。

function obj() {
     var cellSize = 50;

     this.createBlock = function() { // creates a block object
        this.x = 0;
        this.y = 0 - (cellSize * 1.5);
        this.baseVelocity = 1;
        this.velocity = this.baseVelocity;
        return this;
    };

    this.activeBlock = new this.createBlock(); // active block object

    this.nextBlock = new this.createBlock(); // next block object
}
于 2013-02-25T06:09:34.567 に答える