1.实用的遍历写法与工具:
(1).方法库:
o = {};
for (p in o) {
//跳过继承属性
if (!o.hasOwnProperty(p))
continue;
//跳过方法
if (typeof o[p] === "function")
continue;
}
//复制属性(覆盖同名),不处理setter getter
function extend(o, p) {
for (prop in p) {
o[prop] = p[prop];
}
return o;
}
//复制属性(不覆盖同名),不处理setter getter
function merge(o, p) {
for (prop in p) {
if (o.hasOwnProperty(prop)) continue;
o[prop] = p[prop];
}
return o;
}
//删除不需要的属性
function restrict(o, p) {
for (prop in o) {
if (!(prop in p))
delete o[prop];
}
return o;
}
//删除同名属性
function substract(o, p) {
for (prop in p) {
delete o[prop];
}
return o;
}
//返回一个合成的新对象
function union(o, p) {return extend(extend({}, o), p);}
//返回一个新对象, 包含两个对象的公共属性
function intersection(o, p) {return restrict(extend({}, o), p);}
//返回自有属性的属性名数组
function keys(o) {
if (typeof o !== "object") throw new TypeError();
var result = [];
for (var prop in o) {
if (o.hasOwnProperty(prop)) {
result.push(prop);
}
return result;
}
}
(2).仅ECMAScript5:
Object.keys和Object.getOwnPropertyNames方法分别返回对象可枚举的和所有自有属性名的集合。
2.getter和setter:
var p = {
x: 1.0,
y: 1.0,
//this指向本对象
get r() {return Math.sqrt(this.x * this.x + this.y * this.y)},
set r(newValue) {}
};
console.log(p.r);