Object.create()
-
根据现有对象创建新对象
-
可以实现继承
-
使用Object.getPrototypeOf()来获取指定对象的原型对象
let obj = { name: 'sun', age: 24, } // 可以看到name属性其实不是newObj自身原有的,而是继承而来 let newObj = Object.create(obj) // {} console.log(newObj.name) // sun // obj就是newObj的原型对象 newObj._proto_ === obj // true // 使用Object.getPrototypeOf()来获取指定对象的原型对象 Object.getPrototypeOf(newObj) // {name: "sun", age: 24} // obj
A) Object.create()的参数
Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。
语法
Object.create(proto, descriptors )
- 第一个参数:新对象的原型对象
- 第二个参数:新对象指定的属性,是一个对象形式的配置
- value: 属性的默认值, 默认为undefined
- congigurable: 能否使用delete、能否修改属性特性、或能否修改访问器属性、false为不可重新定义,默认值为true
- enumberable: 可枚举性,对象属性能否通过for-in 循环,默认为true
- writable: 对象属性是否可修改,默认为true,可修改,设置false可理解为常量不可修改
let newObj = Object.create( {name:'sun'}, { age: { value: 24, // 属性默认值 congigurable: false, // 设置false之后将不能不删除 enumerable: true, writable: false, // 设置false之后将不能修改 } } ) console.log(newObj) // {age: 24} console.log(newObj.name) // sun // 继承而来 // newObj的age属性设置了congigurable: false, // 设置false之后将不能不删除 delete newObj.age // false // 浏览器控制台输出false 删除失败 cobnsole.log(newObj.age) // 24 仍然可以使用 // newObj的age属性设置了wrirable: false, // 设置false之后将不能不修改 newObj.age = 25 cobnsole.log(newObj.age) // 24 仍然是24 // 没有修改