Javascript从1个对象创建2个实例

时间:2012-11-23 13:42:12

标签: javascript object javascript-objects

我有两个DIV容器,每个包含一个谜题(用jquery draggables实现)。

我还有一个看起来像这样的对象:

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

为我开始使用的DIV拼图:

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

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

但是对于左边的那个它不起作用。我将要做的所有事情都发生在右边:/当我取消注释正确的开始代码时,它将适用于左边:) 似乎是一个正确的启动代码是错误的? 这是创建2个拼图实例的错误方法吗?

由于 马特

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以创建类'构造函数而不是object:

function Puzzle(){
   var self = this;

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

并创建它的两个实例:

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

// right puzzle div
var puzzleRight = new Puzzle();
puzzleRight.init(rightContainer);

答案 2 :(得分:0)

实际上puzzleLeftpuzzleRightpuzzle的对象相同。

您可以创建拼图

function puzzle(){
...
} 

并使用

new Puzzle()

或使用jquery的clone函数创建具有不同引用的对象的副本