1.把p中可枚举的属性赋值到o,并返回o(若o和p中有同名属性则覆盖)
function extend(o,p){
for(prop in p){
o[prop]=p[prop]
}
return o
}
2.把p中可枚举的属性赋值到o,并返回o(若o和p中有同名属性,o不受影响)
function merge(o,p){
for(prop in p){
if(o.hasOwnProperty[prop]) continue
o[prop]=p[prop]
}
return o
}
3.如果o中属性在p中没有同名属性,则从o中删除这个属性
function restrict(o,p){
for(prop in o){
if(!(prop in p)) delete o[prop]
}
return o
}
4.如果o中属性在p中存在同名属性,则从o中删除这个属性
function subtract(o,p){
for(prop in p){
delete o[prop]
}
return o
}
5.返回一个新对象,这个对象拥有同时在o和p中出现的属性,如果o和p中有重名属性,使用p中属性值
function union(o,p){
return extend(extend({},o),p)
}
6.返回一个新对象,这个对象拥有同时在o和p中出现的属性,p中的属性值被忽略
function intersection(o,p){
return restrict(extend({},o),p)
}
7.返回一个数组,这个数组是o中可枚举的自有属性的名字
function keys(o){
if(type of o !== "object") throw TypeError()
var result = []
for(var prop in o){
if(o.haOwnProperty(prop))
result.push(prop)
}
return result
}