Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在CoffeeScript中克隆/复制对象的实例?_Javascript_Coffeescript_Clone_Instance - Fatal编程技术网

Javascript 如何在CoffeeScript中克隆/复制对象的实例?

Javascript 如何在CoffeeScript中克隆/复制对象的实例?,javascript,coffeescript,clone,instance,Javascript,Coffeescript,Clone,Instance,这是一个相当直截了当的问题,但谷歌目前还没有发现任何问题 如何在Coffeescript中复制/克隆/复制对象的实例?我总是可以创建一个clone()方法,该方法返回一个带有复制值的新实例,但这似乎是一种容易出错的方法 CoffeeScript是否提供了一个更简单的解决方案?这可能有效 clone = (obj) -> return obj if obj is null or typeof (obj) isnt "object" temp = new obj.constructo

这是一个相当直截了当的问题,但谷歌目前还没有发现任何问题

如何在Coffeescript中复制/克隆/复制对象的实例?我总是可以创建一个
clone()
方法,该方法返回一个带有复制值的新实例,但这似乎是一种容易出错的方法

CoffeeScript是否提供了一个更简单的解决方案?

这可能有效

clone = (obj) ->
  return obj  if obj is null or typeof (obj) isnt "object"
  temp = new obj.constructor()
  for key of obj
    temp[key] = clone(obj[key])
  temp

采纳自:

感谢拉里·巴特的提示:

John Resig使用jQuery.extend的解决方案非常出色

// Shallow copy
newObject = $.extend({}, oldObject);

// Deep copy
newObject = $.extend(true, {}, oldObject);

更多信息可在CoffeeScript烹饪手册的。

中找到:

Underline.js还有一个浅克隆功能:


它应该是
new obj.constructor()
。否则,您将得到一个“无法将'temp'转换为object”。当我这样做时,更改新对象中的属性最终会更改旧对象中的属性,那么这是一个“副本”吗?嗯,听起来不对:)您是在编辑基本属性还是复杂属性?如果要编辑嵌套属性,可能需要使用深度副本。以下是John Resig对JavaScript的原始回答:(John是jQuery的创建者)。我想我已经对它进行了分类。我认为这是KnockoutJS将我的JS对象包装为KO VM。