// Object.create: 创建一个具有指定原型且可选择性地包含指定属性的对象
// Object.create(proto, [ propertiesObject ])
// proto 例子
const person = {
name: '小花',
age: 24
}
// 以person为原型 创建了一个对象
// obj.__proto__ === person
const obj = Object.craete(person)
// propertiesObject 指定属性 包括 value writable enumerable configurable
// value: 属性值
// writable: 属性是否可写
// enumerable: 属性是否可枚举
// configurable: 属性是否可配置
// 这些属性默认 都是false
const person2 = {
name: '小蓝',
age: 23
}
// 创建以 person2为原型的对象 并添加了2个额外属性 size shape 并设置了
// 额外属性的数据属性
const obj2 = Object.create(person2, {
size: {
// value 指定值
value: '小米',
// 属性size 是否可写 默认是false 不可写
writable: false,
// 属性size 不可枚举
enumerable: false
},
shape: {
value: '小绿',
writable: true,
enumerable: true
}
})
// Object {shape: "小绿", size: "小米"}
log( obj2 )
// 因为size属性的 数据属性writable 设置为不可写 所以这里报错
// obj2.size = '小紫'
// shape name age 未输出size 因为enumerable = false 该属性不可枚举
for (let p in obj2) {
log(p)
}
// shape 属性可以写 因为writable = true
// 并且可枚举
obj2.shape = '小黄'
// 小黄
log(obj2.shape)