我有两个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个拼图实例的错误方法吗?
由于 马特
答案 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 = [ ];
}
};
这将确保puzzleLeft
和puzzleRight
正在使用不同的数组。
如果您使用的是像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)
实际上puzzleLeft
和puzzleRight
与puzzle
的对象相同。
您可以创建拼图
function puzzle(){
...
}
并使用
new Puzzle()
或使用jquery的clone函数创建具有不同引用的对象的副本