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轉化爲對象