var extend = (function () {
for(var p in {toString:null}){
//檢查當前瀏覽器是否支持forin循環去遍歷出一個不可枚舉的屬性,比如toString屬性,如果不能遍歷不可枚舉的屬性(IE瀏覽器缺陷),那么forin循環不會進來
return function extend(o) {
for(var i =1,len=arguments.length;i<len;i++){
var source = arguments[i];
for(prop in source){
o[prop] = source[prop];
}
}
}
}
//這些屬性需要特殊檢查一下,因為有的IE瀏覽器不支持for in去遍歷這些屬性
var protoprops = ["toString","valueOf","constructor","hasOwnProperty","isPropertyOf","propertyIsEnumerable","toLocalString"];
return function patched_extend(o){
for(var i =1,len=arguments.length;i<len;i++){
var source = arguments[i];
for(prop in source){//先遍歷常規的屬性
o[prop] = source[prop];
}
//檢查是否有特殊屬性,防止漏掉
for(var j =0,len=protoprops.length;j<len;j++){
prop = protoprops[j];
if(source.hasOwnProperty(prop)){
o[prop] = source[prop];
}
}
}
return o;
}
}());