var Person = { name : 'wenzhe', number : 91 }; // checks for both own properties and prototype properties console.log('number' in Person); // true console.log('constructor' in Person); // true // only checks for own properties console.log(Person.hasOwnProperty('number')); // true console.log(Person.hasOwnProperty('constructor')); // false
var Person = { name : 'wenzhe', number : 91 }; delete Person.name; console.log('name' in Person) // false
var Person = { name : 'wenzhe', number : '00' }; for (pro in Person) { console.log(pro + ' : ' + Person[pro]); } // name : wenzhe // number : 00 // 此方法能够枚举本身和原型链中的内容 // 还能够使用对象的keys方法,它返回一个数组,里面的内容就是由全部 // 的对象的key值构成的数组, 可是不会包含原型链中的内容 var properties = Object.keys(Person); var i = 0, len = properties.length; for (var i = 0, len = properties.length; i < len; i++) { console.log(properties[i] + ' : ' + Person[properties[i]]); }
枚举
若是某个属性的的设定为不可枚举的,那么上面那两种方法都不能显示出那个属性,可是对于keys返回的那个数组,仍然包含不可被枚举的那个值数组
// properties是数组,每一个数组都有本身的length属性 console.log('length' in properties) // true; console.log(Person.propertyIsEnumerable('length')); // false
Get & Set(accessor properties)this
var Person2 = { name : 'wenze'; get name() { console.log('Reading name'); return this.name; } set name(value) { console.log('Setting name'); this.name = value; } } Person2.name = "Chen";
在对象外面为对象添加属性的方法prototype
在对象外面添加通常的属性(Data Property)--Object.definePropertycode
var person = {}; Object.defineProperty(person, "name", { value : 'wz', // 该属性的值 enumerable : true, // 是否能够被枚举 configurable : true, //name能够由Data pro <-> accessor property writable : false // 不能在被更改,同类型也不行 })
在对象外面添加 get&set对象
var person1 = {name : 1}; Object.defineProperty(person1, "name", { get: function() { console.log("Reading name"); return this._name; }, set: function(value) { console.log("Setting name to %s", value); this._name = value; }, enumerable: true, configurable: true })
添加多个属性使用Object.definePropertyip
var person1 = {}; Object.defineProperties(person1, { _name: { value: "Nicholas", enumerable: true, configurable: true, writable: true }, name: { get: function() { console.log("Reading name"); return this._name; }, set: function(value) { console.log("Setting name to %s", value); this._name = value; }, enumerable: true, configurable: true } });
查看属性值的设置状况原型链
var person1 = { name: "WZ" }; var descriptor = Object.getOwnPropertyDescriptor(person1, "name"); console.log(descriptor.enumerable); console.log(descriptor.configurable); console.log(descriptor.writable); console.log(descriptor.value); // true // true // true // "WZ"