/*
把P中的可枚举属性复制到o中,并返回o中
如果o和p中含有同名的属性,则覆盖O中的属性
这个函数并不处理getter和setter以及复制属性
*/
function extend(o,p){
for (prop in p){ //遍历p中的属性
o[prop] = p[prop]; //将属性添加至o中
}
return o;
} /*
*将p中的可枚举属性复制o中,并返回o
如果o和p中有同名的属性,o中的属性将不受影响
这个函数并不处理getter和setter以及复制属性
*/
function merge(o,p){
for(prop in p){ //遍历p中的所有属性
if (o.hasOwnProperty[prop]) continue;//过滤掉已经在o中存在的属性
o[prop] =p[prop]; //将属性添加至o中
}
return o;
}
/*
*如果o中的属性在P没有同名属性,则从o中删除这个属性
*返回o
*/
function restrict(o,p){
for (prop in o){ //遍历o中的所有属性
if(!(prop in p)) delete o[prop]; //如果在p中不存在,则删除之
}
return o;
} /*
*如果o中的属性在p中存在同名属性,则从o中删除这个属性
*返回o
*/
function subtract(o,p){
for(prop in o){ //遍历p中的所有属性
delete o[prop]; //从o中删除(删除一个不存在的属性不会报错)
}
return o;
}
/*
*返回一个新对象,这个对象同时拥有o的属性和p的属性
*如果o和p中有重名对象,使用p中的属性值
*/
function union(o,p){
return (extend(extend({},o),p);)
}
/*
返回一个新对象,这个对象拥有同时在o和p中出现的属性
很像求o和p的交集,但p中属性的值被忽略。
*/
function intersection(o,p){ return restrict(extend({},o),p); }
/*
返回一个数组,这个数组包含的是o中可枚举的自有属性的名字
*/
function keys(o){
if (typeof 0 !== "object") throw TypeError(); //参数必须是对象
var result = []; //将要返回的数组
for (var prop in o){ //遍历所有可枚举的属性
if(o.hasOwnProperty(prop)){ //判断是否是自有属性
result.push(prop); //将属性名添加至数组中
} }
return result; //返回这个数组
} /*ES5除了for/in 循环之外,定义了用以枚举属性名称的函数。
第一个是Object.keys(),返回一个数组。
第二个可枚举函数是Object.getOwnPropertyNames()
ES3中无法实现类似的函数,因为ES3中没有提供任何方法来获取对象的不可枚举属性
*/

最新文章

  1. SQL Server 2008 R2——统计各部门某年入职人数
  2. strurts2入门
  3. Mini ORM——PetaPoco笔记(转)
  4. 收集的maven 仓库地址(maven repository)
  5. JDK源码包结构分类
  6. oracle必须启动哪些服务?
  7. Magento架构分析,Magento MVC 设计分析
  8. hadoop开发环境-----eclipse
  9. SQL SERVER 2008/2012/2012R2/2014 设置开启远程连接(sa配置)
  10. mongodb命令使用
  11. 360随身wifi怎样购买?360随身wifi怎样预约?
  12. kettle Row Normaliser(行转列)
  13. iOS-assign、copy 、retain等关键字的含义
  14. Java 中使用Jackson反序列化
  15. 掌握Chrome Developer Tools:下一阶段前端开发技术
  16. UWP上可用的GB2312编码
  17. phython廖雪峰
  18. Beta 第四天
  19. 关于Skyline沿对象画boundingbox的探讨
  20. Django之Form验证

热门文章

  1. Go_go build 和 go install
  2. C分支语句的工程用法
  3. Linux源码编译安装php7.3
  4. PyQt5学习笔记-从主窗体打开一个子窗体
  5. sql 根据两点经纬度算出两点之间距离
  6. spring(三):ApplicationContext
  7. Jenkins Pipeline waitForQualityGate pending 超时
  8. 1167E - Range Deleting 双指针
  9. Nearest Interesting Number
  10. Swagger-ui接口文档