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; }