对象
无序属性的集合,其属性可以包含基本值、对象和函数
自定义对象
- 创建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())
- 对象字面量语法
```javascript
var person = {
name: "fanison",
age: 18,
jon: "engineer",
sayName: function(){
console.log(this.name);
}
}
属性类型
Object.defineProperty()
接受三个参数: 属性所在的对象、属性的名字、描述符对象(数据属性)
let obj = { a: 1}
obj.b = 2
obj['c'] = 3
Object.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); // fanison
person.name = "yafanison";
console.log(person.name); // fanison
delete person.name
console.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函数设置值。