1.通过原型继创建一个新对象 Object.create()
function inherit(p){
if(p == null) throw TypeError();
if(Object.create){
return Object.create(p);
}
var t = typeof p;
if(t !== 'object' || t !== 'function') throw TypeError();
function f() {};
f.prototype = p;
return new f();
}
var obj = {name: 'zhangsan',age: 4};
var obj2 = inherit(obj);
obj2.name = 'lisi';
console.log(obj.name); //zhangsan obj内的内容并没有改变
obj2.sex = '男';
console.log(obj.sex); //undefined obj内的内容并没有改变
delete obj2.name; //这段代码无效,因为name是继承过来的
2.检测属性
JavaScript中可以通过in运算符、hasOwnProperty()和propertyIsEnumerable()方法完成这个检测属性。
3.属性描述
通过调用Object.getOwnPropertyDescriptor()可以获得某个对象特定的属的属性描述符。
console.log(Object.getOwnPropertyDescriptor(obj,'name'))
//输出:value: "zhangsan", writable: true, enumerable: true, configurable: true
console.log(Object.getOwnPropertyDescriptor(obj2,'name')) //输出:undefined,由此看出,getOwnPropertyDescriptor()只能得到自有的属性描述,不能得到继承的
想要设置或者修改属性的某种特性 则需要调用Object.defineProperty().多个则使用defineProperties().
Object.defineProperty(obj2,'id',{value:1,writable: true, enumerable: true, configurable: true});
Object.defineProperty(obj2,'id',{writable: false});
obj2.id = 3; //修改无效
Object.defineProperty(obj2,'id',{value: 4}); //修改生效
4.isPrototypeOf()
想要检测一个对象是否是另一个对象的原型(或处于原型链中),可以使用isPrototypeOf()方法。
5.classof()
通过Object.prototype.toString.call() 自定义一个函数calssof来判断类型。
function classof(o){
if(o === null) return null;
if(o === undefined) return undefined;
return Object.prototype.toString.call(o).slice(8,-1)
}
console.log(classof(null));
console.log(classof(1));
console.log(classof(""));
console.log(classof(false));
console.log(classof({}));
console.log(classof([]));
console.log(classof(/./));
console.log(classof(new Date()));
console.log(classof(window));
function g() {};
console.log(classof(inherit));
console.log(classof(new g()));
6.可扩展性
通过传入Object.esExtensible()来判断对象是否可扩展,也可以通过Object.prevenExtensions()转换成不可扩展。可扩展性的目的是将对象‘锁定’,以避免外界干扰。
7.序列化对象
对象序列化是指将对象的状态转换成字符串,也可以将字符串还原为对象。
var s = JSON.stringify(obj); //对象转字符串
var p = JSON.parse(s); //字符串转对象
8.对象方法
①toString()
②toLocaleString() 可转换Date
③toJSON()
④valueOf() 可将Date转换成时间戳