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

全部评论
一看头像就是伟哥
点赞 回复 分享
发布于 2016-10-04 14:04

相关推荐

嗷佛快来快来快快快来:我当时就是听了别人的谣言,环境的大变,左右摇摆不定,到最后一事无成。我也给你提不了什么有效的建议,因为我自己就是败犬。但是我确实是从cpp转到了Java,cpp也做过项目,了解过具体的细分方向。如果你感兴趣,不会拦你。因为只要一件事情能坚持下去 就会发光
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务