javascript中扩展函数的使用

时间:2012-03-29 05:50:04

标签: jquery javascript

以下是核心javascript中的扩展功能。它与jQuery中的$ .extend()相同。它用于更新/修改JavaScript对象。

var extend= function() {
            var options,
            name,
            src,
            copy,
            copyIsArray,
            clone,
            target = arguments[0] || {},
            i = 1,
            length = arguments.length,
            deep = false;

            if (typeof target === "boolean") {
                deep = target;
                target = arguments[1] || {};
                i = 2;
            }

            if (typeof target !== "object" && !isFunction(target)) {
                target = {};
            }

            if (length === i) {
                target = this;
                --i;
            }

            for (; i < length; i++) {
                if ((options = arguments[i]) != null) {
                    for (name in options) {
                        src = target[name];
                        copy = options[name];

                        if (target === copy) {
                            continue;
                        }

                        if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
                            if (copyIsArray) {
                                copyIsArray = false;
                                clone = src && isArray(src) ? src: [];

                            } else {
                                clone = src && isPlainObject(src) ? src: {};
                            }

                            target[name] = extend(deep, clone, copy);

                        } else if (copy !== undefined) {
                            target[name] = copy;
                        }
                    }
                }
            }
            return target;
        }

如下所示:

    extend(curConfig, newConfig);   

因为它是用于修改具有新对象的所有地方的标准函数。我想了解并分析这个功能。

  1. 由于函数定义没有显示任何参数可以传递,但使用它时需要任意数量的参数。那么,这个函数的表现如何?
  2. 此功能的不同用途是什么。有什么方法可以称呼它?
  3. 如果将5个对象参数传递给函数,则第一个参数将是目标,剩余将是源。对 ?如果不存在,是否覆盖或复制了对象?
  4. 任何人都可以用例子解释(或者如果可能的话用jsfiddle演示)?

    提前致谢!

1 个答案:

答案 0 :(得分:1)

  

由于函数定义没有显示任何参数可以传递,但使用它时需要任意数量的参数。那么,这个函数的行为如何?

它使用arguments object

  

有什么方法可以称呼它?

你传递一个对象来扩展它和任意数量的对象来扩展它。