目录
1. Object.create(prototype, [descriptors])
2. Object.defineProperties(object, descriptors)
1. Object.create(prototype, [descriptors])
作用: 以指定对象为原型创建新的对象
为新的对象指定新的属性, 并对属性进行描述
value: 指定值 -
writable: 标识当前属性值是否是可修改的, 默认为false
configurable: 标识当前属性是否可以被删除 默认为false
enumerable: 标识当前属性是否能用for in 枚举 默认为false
var obj = {
username: 'damu',
age: 30
};
var obj1 = {};
obj1 = Object.create(obj, {
sex: {
value: '男',
writable: true,
configurable: true,
enumerable: true
}
});
console.log(obj1.sex) // 男
obj1.sex = '女';
console.log(obj1.sex) // 女
console.log(obj1) // {sex:'女'}
for (var i in obj1) {
console.log(i) // sex username age
}
2. Object.defineProperties(object, descriptors)
作用: 为指定对象定义扩展多个属性
get: 用来获取当前属性值得回调函数
set: 修改当前属性值得触发的回调函数, 并且实参即为修改后的值
存取器属性: setter, getter一个用来存值, 一个用来取值
var obj2 = {
firstName: 'kobe',
lastName: 'bryant'
}
Object.defineProperties(obj2, {
fullName: {
get: function() { // 获取扩展属性的值,
return this.firstName + ' ' + this.lastName
},
set: function(data) { // 监听扩展属性,当扩展属性发生变化的时候会自动调用,自动调用后悔将变化的值作为实参传进来
console.log('set()', data) // set() tim duncan
// console.log(data)
var names = data.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
})
// console.log(obj2)
console.log(obj2.fullName) // kobe bryant
obj2.fullName = "tim duncan"; //会触发 set
console.log(obj2.fullName); // tim duncan
对象本身的两个方法
get propertyName(){} 用来得到当前属性值的回调函数
set propertyName(){} 用来监视当前属性值变化的回调函数
var obj3 = {
firstName: 'curry',
lastName: 'stephen',
get fullName() {
return this.firstName + ' ' + this.lastName
},
set fullName(data) {
var names = data.split(' ');
this.firstName = names[0];
this.lastName = names[1]
}
}
console.log(obj3);
console.log(obj3.fullName) // curry stephen
obj.fullName = 'kobe bryant';
console.log(obj.fullName) // kobe bryant