JavaScript Object对象基本操作编程集锦
// Object
/*
设置属性默认属性
Object.defineProperty()
Object.defineProperties()
获取属性描述方法
Object.getOwnPropertyDescriptor()
获取对象的原型
Object.getPrototypeOf()
设置对象的原型
Object.setPrototypeOf()
判断某原型是否是对象的原型
isPrototypeOf()
检测属性是否存在于实例中
hasOwnProperty()
枚举对象所有属性
in
返回对象可枚举实例属性
Object.keys()
返回对象所有实例属性
Object.getOwnPropertyNames()
创建对象
Object.create()
获取对象原型的方法:
object._proto_
object.constructor.prototype()
object.getPropertyOf()
*/
// 判断是否是对象
function isObject(value) {
return value === Object(value);
}
function isObject(value) {
return Object.prototype.toString.call(value) === '[Object
Object]';
}
// 创建对象
function createObject(obj) {
if (typeof Object.create !== 'function') {
Object.create = function(proto) {
function F() {}
F.prototype = proto;
return new F();
};
}
return Object.create(obj);
}
// 获得对象的所有属性
function inheritedPropertyNames(obj) {
var result = {};
while (obj) {
Object.getOwnPropertyNames(obj).forEach(function(item) {
result[item] = true;
});
obj = Object.getPrototypeOf(obj);
}
return Object.getOwnPropertyNames(result);
}
// console.log(inheritedPropertyNames(Date));
// 判断对象属性是否存在于原型或实例
function hasPrototypeProperty(obj, prop) {
return !obj.hasOwnProperty(prop) && (prop in obj);
}
// 查找属性所属对象
function getDefiningObject(obj, prop) {
while (obj && !{}.hasOwnProperty.call(obj, prop)) {
obj = Object.getPrototypeOf(obj);
}
return obj;
}
// 深拷贝对象
// 确保拷贝后的对象,与原对象具有同样的prototype原型对象和属性。
function deepCopyObject(obj) {
var result = {};
for (var key in obj) {
result[key] = typeof obj[key] === 'object' ?
arguments.callee(obj[key]) : obj[key];
}
return result;
}
function deepCopyObject(obj) {
var result = Object.create(Object.getPrototypeOf(obj));
Object.getOwnPropertyNames(obj).forEach(function(prop) {
var desc = Object.getOwnPropertyDescriptor(obj, prop);
Object.defineProperty(result, prop, desc);
});
return result;
}
var objectdeepcopy = { name: 'yy', family: { father: 'Tom',
mother: 'Lily' }, work: 'student' };
// console.log(deepCopyObject(objectdeepcopy));
function deepCopy(arg) {
var result;
if (typeof arg === "object") {
if (arg instanceof Array) {
result = [];
for (var i = 0; i < arg.length; i++)
result.push(arguments.callee(arg[i]));
return result;
} else {
result = {};
for (var key in arg) {
result[key] = arguments.callee(arg[key]);
}
return result;
}
} else {
return arg;
}
}
var deepcopy = { name: 'yy', a: [{ father: 'Tom', mother: 'Lily'
}], family: { sister: ['Tom', 'Lily'] } };
// console.log(deepCopy(deepcopy));