对象
无序属性的集合,其属性可以包含基本值、对象和函数
自定义对象
- 创建Object实例,再添加属性和方法 ```javascript var person = new Object(); person.name = “fanison”; person.age = 18; person.job = “engineer”
person.sayName = function(){ console.log(this.name); }
创建person对象,添加属性(name、age、job)和方法(sayName())- 对象字面量语法```javascriptvar person = {name: "fanison",age: 18,jon: "engineer",sayName: function(){console.log(this.name);}}
属性类型
Object.defineProperty()
接受三个参数: 属性所在的对象、属性的名字、描述符对象(数据属性)
let obj = { a: 1}obj.b = 2obj['c'] = 3Object.defineProperty(obj,'d',{value: 4}) // 增加Object.defineProperty(obj,'a',{value: 5}) // 修改
数据属性
Configurable:能否通过 delete 删除属性从而重新定义属性
Enumerable: 能否通过for-in循环返回属性
Writable: 能否修改属性的值
Value: 包含这个属性的数据值,默认 undefined
var person = {};Object.defineProperty(person,"name",{writable: false, // 属性不可修改configurable: false, // 不能从对象中删除属性value: "fansion"});console.log(person.name); // fanisonperson.name = "yafanison";console.log(person.name); // fanisondelete person.nameconsole.log(person.name); // fanison
调用 Object.defineProperty() 方法创建新属性时,如果不指定,configurable、enumerable、writable、value的默认值都是false。
访问器属性
Configurable:能否通过 delete 删除属性从而重新定义属性
Enumerable: 能否通过for-in循环返回属性
Get: 读取属性时调用的函数
Set: 写入数据时调用的函数
var book = {_year: 2004,edition: 1}Object.defineProperty(book, "year", {get: function(){return this._year;},set: function(newValue){if(newValue > 2004){this._year = newValue;this.edition += newValue - 2004;}},value:2000});book.year = 2005;console.log(book.edition); // 2
创建book对象, 访问器属性 year 包含 getter函数和setter函数;getter函数返回_year的值,setter函数设置值。
