2016年12月12日 星期一

(js)jquery.extend()

function extend() {
    // copy reference to target object
    var target = arguments[0] || {},
        i = 1,
        length = arguments.length,
        deep = false,
        options;

    // Handle a deep copy situation
    if (target.constructor == Boolean) {
        deep = target;
        target = arguments[1] || {};
        // skip the boolean and the target
        i = 2;
    }

    // Handle case when target is a string or something (possible in deep copy)
    if (typeof target != "object" && typeof target != "function")
        target = {};

    // extend jQuery itself if only one argument is passed
    if (length == 1) {
        target = this;
        i = 0;
    }

    for (; i < length; i++) {

        // Only deal with non-null/undefined values
        if ((options = arguments[i]) != null) {
            // Extend the base object
            for (var name in options) {
                // Prevent never-ending loop
                if (target === options[name])
                    continue;

                if (deep && options[name] && typeof options[name] == "object" && target[name] && !options[name].nodeType) {
                    // Recurse if we're merging object values

                    target[name] = extend(target[name], options[name]);

                } else if (options[name] != undefined) {

                    // Don't bring in undefined values
                    target[name] = options[name];
                }
            }
        }
    }
    // Return the modified object
    return target;
};

沒有留言:

張貼留言