创建对象
- 生成实例来创建一个对象
let obj = new Object()
obj.name = 'shanhe'
obj.eat = function () {
console.log('chifan')
}
- 字面量方式创建新对象
let obj = {
name: 'shanhe',
eat: function () {
console
},
}
属性类型
数据属性
-
Configurable
-
通过 delete 删除属性从而重新定义属性
-
修改属性的特性
-
把属性改为访问器属性
-
直接在对象上定义的属性
-
默认值是true
-
-
Enumerable
-
通过 for-in 循环返回属性
-
能够直接在对象上定义的属性
-
默认值是true
-
-
Writable
-
修改属性的值
-
直接在对象上定义的属性
-
默认值是true
-
-
Value
-
属性的值:这里读取属性,写入时新值保存在这里
-
默认是Undefined
-
-
Object.defineProperty:修改属性的默认特性
-
描述符对象的属性必须是configurable、enumerable、writable、value
访问器属性:只能用 Object.defineProperty() 来间接定义
-
Configurable
-
通过 detele 删除属性从而重新定义属性
-
修改属性的特性
-
把属性修改为数据属性
-
对于直接在对象上定义的属性,默认值是 true
-
-
Enumerable
-
通过 for-in 循环返回属性列表
-
对于直接在对象上定义的属性,默认值是 true
-
-
Get
- 在读取属性时调用的函数,默认值是 Undefined
-
Set
- 在写入属性时调用的函数,默认值是 Undefined
-
举例
let book = { _year: 2023, edition: 1, } Object.defineProperty(book, 'year', { get: function () { return this._year }, set: function () { if (newValue > 2023) { this._year = newValue this.edition += newValue - 2023 } }, }) book.year=2024 alert(book.edition) // 2-
_year 前面的下划线表示只能通过对象方法访问的属性
-
设置一个属性的值会导致其他属性发生变化
-
只指定 getter 意味属性不能写,严格模式下写入会报错,非严格下忽略
-
只指定了 setter 函数属性不能读,严格模式下会报错,非严格下返回Undefined
-
读取属性特性:Object.getOwnPropertyDescriptor( 属性所在对象,读取描述符的属性名称)
-
返回值是一个对象
-
访问器属性,configurable、enumerable、get、set
-
数据属性,confiurable、enmuerable、writable、value
-
let obj = {}
obj.name = 22
Object.getOwnPropertyDescriptor(obj, 'name')
// {value:22,writable:true,enumrable:true,configurable:true}