【问题标题】:How do I clone/copy an instance of an object in CoffeeScript?如何在 CoffeeScript 中克隆/复制对象的实例?
【发布时间】:2012-06-19 02:40:26
【问题描述】:

相当直截了当的问题,但谷歌搜索尚未发现任何问题。

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

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

【问题讨论】:

    标签: javascript coffeescript clone instance


    【解决方案1】:

    这可能有效。

    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
    

    来自:What is the most efficient way to deep clone an object in JavaScript?

    【讨论】:

    • 应该是new obj.constructor()。否则,您将收到“无法将 'temp' 转换为对象。”
    【解决方案2】:

    感谢 Larry Battle 的提示:

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

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

    更多信息可以在jQuery documentation找到。

    【讨论】:

    • 当我这样做时,更改新对象中的属性最终会更改旧对象中的属性,那么这如何是“副本”?
    • 嗯,这听起来不对 :) 您是在编辑原始属性还是复杂属性?如果您正在编辑嵌套属性,则可能需要使用深层副本。这是 John Resig 对 JavaScript 的原始答案:stackoverflow.com/a/122704/746890(John 是 jQuery 的创造者)。
    • 我想我已经整理好了。我认为是 KnockoutJS 将我的 JS 对象包装为 KO VM。
    【解决方案3】:

    来自 CoffeeScript 食谱:

    http://coffeescriptcookbook.com/chapters/classes_and_objects/cloning

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

    http://underscorejs.org/#clone

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 2011-03-29
      • 2013-04-06
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多