下面代码中引用的部分方法在这篇文章中最后一部分:JavaScript数据类型检测详解及jQuery中实现数据类型检测的封装代码分析
// 1、方法扩展
// 2、基于浅比较和深比较实现对象的合并
var extend = function extend (obj) {
// 如果不使用obj形参,也可以使用arguments[0]
// 是undefined或者null,或者类型检测不是一个对象,抛出一个异常
if (obj == null || typeof obj !== 'object') {
throw new TypeError('obj must be an object')
}
var self = this;
var keys = Object.keys(obj); // 获取所有的不包含symbol的私有属性
// 看浏览器是否兼容Symbol
typeof Symbol !== "undefined" ? keys = keys.concat(Object.getOwnPropertySymbols(obj)) : null;
keys.forEach(function (key) {
self[key] = obj[key];
})
return self;
}
/**
* 实现对象的浅合并
* 合并的规律:
* 1、obj1、obj2都是对象:迭代obj2,依次替换obj1
* 2、obj1不是对象,obj2是对象:obj2替换obj1
* 3、obj1是对象,obj2不是对象:以obj1为主
* 4、obj1、obj2都不是对象:obj2替换obj1
*/
var shallowMerge = function shallowMerge