【TDG-读书笔记】6.1 枚举对象属性的工具函数
extend(o, p) 恶性合并,用p中的同名属性覆盖掉o中的同名属性
var p1 = { "name" : "Tom", "age" : 29 };
var p2 = { "name" : "July", "weight" : 110 };
function extend ( o, p ) {
for ( var prop in p ) {
o[prop] = p[prop];
}
return o;
}
var res = extend( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:57 Object {name: "July", age: 29, weight: 110}
test.html:58 Object {name: "July", weight: 110}
test.html:59 Object {name: "July", age: 29, weight: 110}
merge(o, p) 友好合并,保留o中的同名属性
function merge ( o, p ) {
for ( var prop in p ) {
if ( o.hasOwnProperty( prop ) ) continue;
o[prop] = p[prop];
}
return o;
}
var res = merge( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:64 Object {name: "Tom", age: 29, weight: 110}
test.html:65 Object {name: "July", weight: 110}
test.html:66 Object {name: "Tom", age: 29, weight: 110}
restrict(o, p) 排除异己,从o中删除p中不存在的属性
function restrict ( o, p ) {
for ( var prop in o ) {
if ( ! ( prop in p) ) delete o[prop];
}
return o;
}
var res = restrict( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:46 Object {name: "Tom"}
test.html:47 Object {name: "July", weight: 110}
test.html:48 Object {name: "Tom"}
substrict(o, p) 残杀同类,从o中删除p中存在的属性
function subtract ( o, p ) {
for ( var prop in p) {
delete o[prop];
}
return o;
}
var res = subtrct( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:53 Object {age: 29}
test.html:54 Object {name: "July", weight: 110}
test.html:55 Object {age: 29}
union(o, p) 善意的谎言,合并对象属性,但保留p自身的同名属性,返回新对象
function union ( o, p ) {
return extend( extend( {}, o ), p);
}
var res = union( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:56 Object {name: "Tom", age: 29}
test.html:57 Object {name: "July", weight: 110}
test.html:58 Object {name: "July", age: 29, weight: 110}
intersection(o, p) 不求回报的付出,返回一个拥有o, p共有属性的新对象,保留o中的属性值
function intersection ( o, p ) {
return restrict( extend( {}, o ), p);
}
var res = intersection( p1, p2 );
console.log(p1);
console.log(p2);
console.log(res);
test.html:61 Object {name: "Tom", age: 29}
test.html:62 Object {name: "July", weight: 110}
test.html:63 Object {name: "Tom"}
keys(o) 返回一个数组,数组里包含了对象o里可以枚举的自有属性(非原型属性)
function keys( o ) {
if ( typeof o !== "object" ) throw TypeError();
var result = [];
for ( var prop in o ) {
if ( o.hasOwnProperty( prop ) ) {
result.push( prop );
}
}
return result;
}