1. Object.create(prototype,[descriptors])
作用: 以指定对象为原型创建新的对象
为新的对象指定新的属性,并对属性进行描述
-value 指定值
-writable 标识当前属性值是否是可修改的,默认为false
-configurable 标识当前属性是否可被删除,默认为false
-enumerable 标识当前属性是否可用for in枚举,默认false
var obj = {name:'Yoona',age:28};
var obj1 = Object.create(obj,{
sex:{
value:'女',
writable:false,// 是否可修改
configurable:false,// 是否可修改
enumerable:false, // 是否可枚举
}
})
console.log(obj1) 可以看到obj1有sex属性,其原型上有obj的属性,所以obj1是以obj为原型创建的对象,它的新属性为sex.
var obj = {name:'Yoona',age:28}
var obj1 = {}
obj1 = Object.create(obj,{
sex: {
value: '女',
writable: false ,// 是否可修改
configurable: false,// 是否可被删除
enumerable: false // 是否可枚举
}
})
console.log(obj1)
console.log(obj1.sex)// 女
obj1.sex = '男';// 改变sex属性的值
console.log(obj1.sex);//女 并没有改变
delete obj1.sex;//删除sex属性
console.log(obj1)// 并没有删除
for(var i in obj1){// 枚举obj1对象
console.log(i)// name age 并没有sex
}
var obj = {name:'Yoona',age:28}
var obj1 = {}
obj1 = Object.create(obj,{
sex: {
value: '女',
writable: true ,// 是否可修改
configurable: true,// 是否可被删除
enumerable: true // 是否可枚举
}
})
console.log(obj1)
console.log(obj1.sex)
obj1.sex = '男'
console.log(obj1.sex)
delete obj1.sex
console.log(obj1)
当writable,configurable,enumerable的值为true时:sex的值可以修改,也可以删除
var obj = {name:'Yoona',age:28}
var obj1 = {}
obj1 = Object.create(obj,{
sex: {
value: '女',
writable: true ,// 是否可修改
configurable: true,// 是否可被删除
enumerable: true // 是否可枚举
}
})
console.log(obj1)
console.log(obj1.sex)
obj1.sex = '男'
console.log(obj1.sex)
//delete obj1.sex
//console.log(obj1)
for(var i in obj1){
console.log(i)
}
sex属性也可以枚举出来
2. Object.defineproperties(object,description)
作用: 为指定对象定义扩展多个属性
-get 用来获取当前属性值的回调函数
-set 修改当前属性值的触发的回调函数,并且实参即为修改后的值
存取器属性: setter getter 一个用来存值 一个用来取值
var obj2 = {firstName: 'Taylor',lastName: 'Swift'}
Object.defineProperties(obj2,{
fullName: {
get: function(){// 获取扩展属性的值 获取扩展属性的值时自动调用
return this.firstName + ' ' + this.lastName
},
set: function(data){// 监听扩展属性,当扩展属性发生变化时会自动调用,并将变化的值作为实参注入set函数
var names = data.split(' ')
this.firstName = names[0]
this.lastName = names[1]
}
}
})
console.log(obj2)
console.log(obj2.fullName)
obj2.fullName = 'Taylor Smith'
console.log(obj2.fullName)
3. 对象本身的两个方法
get propertyName(){} 用来得到当前属性值的回调函数
set propertyName(){} 用来监视当前属性值变化的回调函数
var person = {
firstName: 'Taylor',
lastName: 'Swift',
get fullName(){
return this.firstName + ' ' + this.lastName
},
set fullName(data){
var names = data.split(' ')
this.firstName = names[0]
this.lastName = names[1]
}
}
console.log(person)
person.fullName = 'Kristen Stewart'
console.log(person)