for/in循环能够遍历对象中全部能够枚举的属性(包括自有属性和继承属性)。对象继承的内置方法不能枚举,凡是在代码中给对象本身或者继承的类添加的属性方法都是可枚举的,可是对象自有的内置属性可不能够枚举,这个不必定,好比咱们能够试试Math的内置random属性(不可枚举)和window的内置name属性(可枚举)。dom
一.如下总结一些枚举对象属性的工具函数:函数
1.若是o和p有同名属性,p覆盖o工具
function extend(o,p){ for(prop in p){ if(!p.hasOwnProperty(prop)) continue;//屏蔽可枚举的继承属性 o[prop] = p[prop]; } return o; }
2.若是o和p有同名属性,p不影响o属性spa
function merge(o,p){ for(prop in p){ if(!p.hasOwnProperty(prop)) continue;//屏蔽可枚举的继承属性 if(o.hasOwnProperty(prop)) continue;//同名属性跳过 o[prop] = p[prop]; } return o; }
3.若是o中属性在p没有同名属性,则删除掉o中这个属性rest
function restrict(o,p){ for(var prop in o){ if(!prop in p) delete o[prop]; } return o; }
4.删除o中与p中同名的属性code
function subtract(o,p){ for(var prop in p){ delete o[prop]; } return o; }