1.对象的分类javascript
2.属性的分类java
3.建立对象的方式浏览器
// 建立一个以普通对象为原型的对象 var o1 = Object.create({x:1,y:2}); // 建立一个没有原型的对线 var o2 = Object.create(null); // 建立以Object.prototype为原型的对象 var o3 = Object.create(Object.prototype); // 建立带属性x,y的对象 var o4 = Object.create(object.prototype,{ x: {value:1, configurable:true, enumerable:true, writable:true}, y: {value:2, configurable:true, enumerable:true, writable:true} });
4.检测对象是否拥有某属性函数
// in运算符,检测对象全部(包括继承)属性,IE只有当可枚举属性时才返回true var o = {x:1}; 'x' in o; //true 'y' in o; //false 'toString' in o //true // o.hasOwnProperty(),检测对象的全部自有属性(无论是否可枚举) o.hasOwnProperty('x'); //true o.hasOwnProperty('toString'); //false // o.propertyIsEnumerable(),检测对象的全部可枚举自有属性 o.propertyIsEnumerable('x'); //true Object.prototype.propertyIsEnumerable('toString') //false
5.枚举对象的属性spa
6.属性的特性prototype
数据属性的4个特性:值(value)、可写性(writable)、可枚举性(enumerable)和可配置性(configurable)对象
存取器属性的4个特性:读取(get)、写入(set)、可枚举性(enumerable)和可配置性(configurable)blog
// 调用Object.getOwnPropertyDescriptor()能够查看自有属性的特性 // 返回 {value:1, writable:true, enumerable:true, configurable:true} Object.getOwnPropertyDescriptor({x:1},'x'); // 返回undefined Object.getOwnPropertyDescriptor({}, 'x'); 设置属性的特性用Object.defineProperty()或Object.defineProperties(),如: var o = {}; Object.defineProperty(o,'x',{value:1, writable:true, enumerable:true, configurable:true}); //这个函数没有返回值 var p = Object.defineProperties({}, { x: {value:1, writable:true, enumerable:true, configurable:true}, y: {get: function(){}, enumerable:true, configurable:true} });
注:若是属性是不可配置的,则不能够修改属性的可枚举性和可配置性,可写性只能从true改为false。继承
7.对象的三个属性ip
查看原型属性
// ECMAScript5 var o = {}; console.dir(Object.getPrototypeOf(o)); //Object.prototype对象 // ECMAScript3 console.dir(o.constructor.prototype); //这个方法并不可靠,o.constructor是建立这个对象的构造函数 // 判断一个对象是不是另外一个对象原型,这个函数的功能很是像instanceOf var p = {x:1}; var o = Object.create(p); p.isPrototypeOf(o); //true Object.prototype.isPrototypeOf(o); //true
查看对象的类
function classof(o) { if(o === null) return "Null"; if(o === undefined) return "Undefined"; //使用下面这条没法区分经过构造函数建立的对象 //return Object.prototype.toString.call(o).slice(8,-1); //本人本身的想法 return o.constructor.name; }
可扩展性
// 使用Object.isExtensible()判断对象是否可扩展 // 使用Object.preventExtensions(),将对象转为不可扩展,一旦转成不可扩展的对象不能转换回可扩展。 // 使用Object.seal()将对象转为不可扩展,且全部自有属性都设置成不可配置,可经过Object.isSealed()来检测对象是否封闭。 // 使用Object.freeze()将对象冻结,除了具有seal的功能外还把属性设置成只读,可经过Object.isFrozen()来检测对象是否冻结
8.序列化对象
// JSON.stringify(o)将对象o转化为字符串 // JSON.parse(o)将对象字符串o转化为对象