【发布时间】:2012-03-10 03:33:46
【问题描述】:
这里是jsfiddel:
class Overlay
constructor: ->
@header = $("<div> header</div>")
@footer = $("<div> footer</div>")
get: ->
@popup = $("<div></div>").append(@header).append(@footer)
@popup.clone(true)
overlay = new Overlay
overlay_extend = {}
$.extend(true,overlay_extend,overlay)
overlay_extend.header.append("<div>more header</div>")
overlay.header.appendTo("body")
在 jsfiddle 中我更改了扩展的 dom 元素并更改了原始 dom..任何新想法。
【问题讨论】:
-
jQuery 只克隆普通对象或数组,但不克隆 DOM 元素(也可能不克隆 jQuery 对象)。 Here is the source.
-
我很确定 $.extend 并不适用于类的实例,尽管我在 DOCS 中找不到任何提及。文档只是提到原始类型没有扩展。此外,使用包含对 dom 元素引用的普通对象进行扩展将导致新对象包含对相同 dom 元素的引用,而不是那些 dom 元素的克隆。这是设计使然。
-
@KevinB - 你说的设计是什么意思..为什么会这样
-
jQuery.extend 方法的目的是将一个对象的内容合并到另一个对象中。它不会克隆对象,它会创建与其他对象具有相同属性的新对象,或者将一个对象的属性添加到现有对象。
-
@KevinB:
extend的常见用法是var copy = $.extend(true, {}, oldObject);,它会克隆对象(尽管有原型)。
标签: jquery coffeescript