天天看點

【筆記】 《js權威指南》- 第6章 對象 - 6.5 - 6.6 屬性操作2

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

繼續閱讀