Skip to content

Latest commit

 

History

History
57 lines (48 loc) · 1.51 KB

assign().md

File metadata and controls

57 lines (48 loc) · 1.51 KB
var createAssigner = function(keysFunc, defaults) {
    return function(obj) { 
        var length = arguments.length;  // 获取arguments的长度

        if(defaults) {                  // 如果defaults为真的话,不管传入什么,强制转化为对象
            obj = Object(obj);
        }

        if(length < 2 || obj == null) { // 如果参数长度小于1或传入的参数为null,则返回obj
            return obj;                 // return obj停止执行下边
        }

        for(var index = 1; index < length; index++) { // 当参数大于2的时候循环
            var source = arguments[index],    // arguments返回的是数组
                keys = keysFunc(source),      // 获取数组中对象的key值
                l = keys.length;              
   
            for(var i = 0; i<l; i++) {
                var key = keys[i];
                
                if(!defaults || obj[key] === void 0) {
                    obj[key] = source[key];
                }
            }
        }
        return obj;
    };
};

var isObject = function(obj) {
    var type = typeof obj;
    if(type === 'function') {
        return true;
    } else if(type === 'object') {
        return true;
    } else {
        return !!obj;
    }
};

function key(source) {
    if(!isObject(source)) {
        return [];
    }
 
    var keys = [];
    for(var key in source) {
        keys.push(key);
    }
    //console.log(keys)
    return keys;
}

var assign = createAssigner(key);
assign({e:3}, {'b': 1, 'c':2, 'd':3});