5

javascript でスネーク ゲームを作成し、window.onload 関数内でオブジェクトとゲームループを作成しています。

window.onload = function() { ... Code ... };

今、関数スコープ内で作成しているオブジェクトが効率的に使用されているかどうか疑問に思っていますか? これら 2 種類の宣言の使用の違いは何ですか?

1:

var Snake = { 
    x: null,
    y: null,
    initialize: function(x, y) { this.x = x; this.y = y },
    position: [x, y], 
    move: function(x, y) { ... Code ... }
}

2:

function Snake(x, y) {
    this.x = x;
    this.y = y;
    this.position = function() { return [this.x, this.y]; };
    this.move = function(x, y) { ... Code ... };
}

私は現在 1: ケースを使用しており、window.onload関数のスコープからオブジェクトを呼び出しています。たとえば、次のようになります。

Snake.initialize(x, y);
while(some condition) {
    Snake.move(x++, y);
}
and so on...

メモリ割り当てに違いはありますか? また、パフォーマンスの問題はありますか?

4

2 に答える 2

3

最初の方法は、オブジェクト リテラル表記を使用して 1 つのオブジェクトのみを作成しますが、2 番目の方法は、オブジェクトの複数のインスタンスを作成できるコンストラクター関数メソッドを使用します。

たとえば、方法 2 では次のことが可能です。

var snake1 = new Snake(1,2);
var snake2 = new Snake(2,2);
//now I have two snakes, however method 1 would only ever have one copy of snake.

方法 1 を使用すると、ゲーム全体で Snake オブジェクトの 1 つのグローバル インスタンスが提供されます。

オブジェクトの複数のインスタンスを作成すると、より多くのリソースが必要になりますが、この場合は気にならないかもしれません。ゲーム内でスネークが 1 つだけ必要な場合は方法 1 を使用し、複数のスネークを使用する予定がある場合は方法 2 が適切なアプローチです。ゲーム内で問題が発生するまで、パフォーマンスやリソースの使用について心配することはありません。

コンストラクター関数に関する記事

于 2013-06-11T08:59:57.580 に答える