JavaScript之再谈对象之枚举对象的工具函数

        在JavaScript中,由于JavaScript的弱类型特征,使得JavaScript变的更加灵活,同样JavaScript中对象也是如此。

var o = {
	name : "wang",
	age : 20,
}
var p = {
	name : "zhou",
	age1 : 21,
}

    以上两个函数为例。

        把p中的可枚举属性复制到o中,并返回o,如果o和p中含有同名属性,则覆盖o中的属性,这个函数并不处理getter和setter以及复制属性。

function extend(o,p){
	for(var prop in p){
		o[prop] = p[prop];
	}
	return o;
}

        将p中的属性复制到o中,返回o,如果o中有属性将不受影响,这个函数并不处理getter和setter以及复制属性。

function merge(o,p){
	for(var prop in p ){
		if(o.hasOwnProperty(prop)){
			continue;
		}
		o[prop] = p[prop];
	}
	return o;
}

        如果o的属性在p中没有同名属性,则从o中删除这个属性并返回。

function restrict(o,p){
	for(var prop in o){
		if(!(prop in p)){
			delete o[prop];
		}
	}
	return o;
}

        如果o中的属性在p中存在同名属性,则从o中删除这个属性并返回。

function subtract(o,p){
	for(var prop in o ){
		if(prop in p){
			delete o[prop];
		}
	}
	return o ;
}

        以上是一些方法,下面用上面的方法做一些实例。

        返回一个新对象,这个对象同时拥有o的属性和p的属性,如果o和p有重名属性,使用p中的属性。

function union(o,p){
	return extend(extend({},o),p);
}

        返回一个新对象,这个对象拥有同时在o和p中出现的属性,很像求交集,但p中的属性值被忽略。

function intersection(o,p){
	return restrict(extend({},o),p);
}

        返回一个数组,这个数组包含o中可枚举的自由属性的名字。

function keys(o){
	if(typeof(o) !== 'object'){
		throw TypeError();
	}
	var arr = [];
	for(var prop in o){
		if(o.hasOwnProperty(prop)){
			arr.push(prop);
		}
	}
	return arr;
}

        在ES5.0中有定义用以枚举属性的函数。

        Object.keys()返回数组,数组由对象中可枚举属性组成。

console.log(Object.keys(o));

        Object.getOwnPropertyNames(),返回对象中所有自有属性的名称,不仅仅是可枚举的属性

console.log(Object.getOwnPropertyNames(o));


        喜欢就收藏下。

        --主页传送门--

你可能感兴趣的:(JavaScript,JavaScript学习之路)