2

それぞれにパズルが含まれている2つのDIVコンテナーを取得しました(jquery draggablesによる実現)。

次のようなオブジェクトも 1 つ取得しました。

var puzzle var puzzle = {
    option1 = [],
    init:function(container) { .... }
}

1 つの DIV のパズルを開始するには、次を使用します。

// left puzzle div
var puzzleLeft = puzzle;
puzzleLeft.init(leftContainer);

// right puzzle div
var puzzleRight = puzzle;
puzzleRight.init(leftContainer);

しかし、左のものは機能していません。私が左にしようとしているすべてのことは、右のもので起こります:/右のものの開始コードのコメントを外すと、左のもので機能します:)右のもののようですが、開始コードが間違っていますか? パズルの 2 つのインスタンスを作成する方法は間違っていますか?

ありがとうマット

4

3 に答える 3

2

プロトタイプの継承

あなたのタイトルは「1つのオブジェクトから2つのインスタンスを作成する」と言っています。これには、プロトタイプの継承が随所に書かれています。

Object.create別のオブジェクトから継承するオブジェクトを作成するために使用できます。

// left puzzle div
var puzzleLeft = Object.create(puzzle);
puzzleLeft.init(leftContainer);

// right puzzle div
var puzzleRight = Object.create(puzzle);
puzzleRight.init(leftContainer);

ただし、オブジェクトを参照するプロパティは、関数内で設定する必要がありますinit。このようなもの:

var puzzle = {

    // Let it be null for now
    option1: null,

    init: function(container) {
        // Set it to empty array inside init
        this.option1 = [ ];
    }

};

これにより、puzzleLeftpuzzleRightが異なる配列で動作することが保証されます。


クローニング

jQuery のようなライブラリを使用している場合、別のオプションは、単にオブジェクトを複製することです。

// left puzzle div
var puzzleLeft = $.extend({ }, puzzle);
puzzleLeft.init(leftContainer);

// right puzzle div
var puzzleRight = $extend({ }, puzzle);
puzzleRight.init(leftContainer);

を使用$.extend({ }, someObject)すると、 のコピーが作成されますsomeObject

于 2012-11-23T14:01:19.253 に答える
1

オブジェクトの代わりにクラスのコンストラクターを作成できます。

function Puzzle(){
   var self = this;

   self.option1 = [];
   self.init = function(container) { .... };
}

そして、その2つのインスタンスを作成します。

// left puzzle div
var puzzleLeft = new Puzzle();
puzzleLeft.init(leftContainer);

// right puzzle div
var puzzleRight = new Puzzle();
puzzleRight.init(rightContainer);
于 2012-11-23T13:44:43.740 に答える
0

実際にはpuzzleLeftpuzzleRightは と同じオブジェクトですpuzzle

次のようにパズルを作成できます

function puzzle(){
...
} 

と使用

new Puzzle()

またはjqueryのクローン機能を使用して、別の参照を持つオブジェクトのコピーを作成します

于 2012-11-23T13:47:28.030 に答える