如果target未指定, 则jQuery名字空间接受extend后的属性, 但是, 如果object中包含dom属性, deep又设置为true的话, 则会出现recursively error, 因为dom树存在循环引用!
- 看代码就很容易明白了,
- extend函数的核心:
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
target[ name ] = jQuery.extend( deep, src || ( copy.length != null ? [ ] : { } ), copy ); - 可以看到这里copy.nodeType处理了dom node, 就是为了避免这种递归, 但是当我们自己有个对象, 此对象是互相引用的结构时, 这个情况就再所难免了, 所以一定要注意
- 另外: $.ajax({param: ...}), 中的param, ajax函数内部就是一个jQuery.extend, 所以这里也要注意一下