对象定义
对象定义:无序属性的集合,其属性可以包含基本值、对象或函数
对象就是 键值对 其中值可以是数据和函数
对象方法就是对象的属性 不过这个属性是函数
var p = new Object()
p.name = 'nike'
p.age = '10'
p.job = 'joker'
p.sayName = function() {
console.log(this.name)
}
console.log(p.age)//10
p.sayName() //nike
var p = {
name: 'nike',
age: '10',
job: 'joker',
sayName: function(){
console.log(this.name)
}
}
console.log(p.job)//joker
p.sayName() //nike
属性类型
数据属性
Configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特
性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true。
Enumerable:表示能否通过 for-in 循环返回属性。像前面例子中那样直接在对象上定
义的属性,它们的这个特性默认值为 true。
Writable:表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的
这个特性默认值为 true。
Value:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined。
修改这 3 个值需要用 es5 的Object.defineProperty()方法
这个方法接收 3 个参数:属性所在的对象、属性的名字、描述符对象
描述符对象的属性必须是:configurable enumerable writeble value
var person = {}
Object.defineProperty(person, 'name', {
writable: true,
value: 'nike'
})
console.log(person.name)//nike
person.name = 'gray'
console.log(person.name)//gray
var person = {}
Object.defineProperty(person, 'name', {
configurable: true,
value: 'nike'
})
console.log(person.name)//nike
delete person.name
console.log(person.name)//undefined
访问器属性
Configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true
Enumerable:表示能否通过 for-in 循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为 true。
Get:在读取属性时调用的函数。默认值为 undefined。
Set:在写入属性时调用的函数。默认值为 undefined
var person = {
oldname: 'jac',
age: '10'
}
Object.defineProperty(person, 'newname', {
get: function(){
return this.oldname
},
set: function(value){
this.oldname = value
}
})
person.newname = 'bool'
console.log(person.oldname)//bool
//设置一个属性的值会导致其他属性的变化
var person = {
name: 'handsome'
}
Object.defineProperties(person, {
boy: {
get: function () {
return this.name + ' hua'
},
set: function (value) {
return this.name = value
}
},
man: {
get: function () {
return this.name
},
set: function (value) {
return this.name = value
}
},
year: {
value: 20
}
})
console.log(person.boy)//handsome hua
console.log(person.man)//handsome
//如果person的name有值,就不要对name再设置 get set
var descriptor = Object.getOwnPropertyDescriptor(person, "year")
//属性所在的对象、要读取其描述符的属性名称
console.log(descriptor.value)//20
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。