【发布时间】:2015-09-23 00:28:15
【问题描述】:
我有一个板课:
var board = new Board();
我想克隆板子并在新板上运行movePiece 函数:
var newBoard = board;
newBoard.movePiece('4a', '3b');
由于我只是分配它,board 和 newBoard 都会有移动的部分。
我如何克隆棋盘以创建一个名为 newBoard 的精确副本,我可以将棋子移到上面而原始棋盘保持不变?
我尝试了几种不同的方法,例如:
Object.assign({}, orig)
和
function clone(orig) {
let origProto = Object.getPrototypeOf(orig);
return Object.assign(Object.create(origProto), orig);
}
【问题讨论】:
-
我不会尝试复制。我会创建一个继承自它的新对象。
return Object.create(orig);然后,您可以使用与原始对象相同的更改来更新新对象。 -
@squint 所以我会创建一个新对象,然后循环并分配所有相同的变量和函数?可以举个例子吗?
-
进行可靠克隆的唯一方法是编写一个方法,该方法采用一个实例并根据该实例的属性创建一个新实例。这是因为外部代理无法确切知道如何处理每个实例变量,并且也可能拥有私有实例变量。因此,只需编写一个新方法来创建一个新对象并复制相关属性,或者编写一个接受另一个对象并执行相同操作的构造函数。
-
@jfriend00 喜欢这样吗? Board.prototype.clone = function() { return Object.assign(Object.getPrototypeOf(this), this); };
-
无论你做什么,不要将this question视为重复!
标签: javascript class object