Saturday, December 20, 2008

用jQuery.extend遇到的问题, 与大家共勉

官方接口: jQuery.extend( [deep], target, object1, [objectN] )

如果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, 所以这里也要注意一下