Object.create(proto,[propertiesObject])
proto:新建立对象的原型对象
propertiesObject:可选。要添加到新对象的可枚举(新添加的属性是其自身的属性,而不是其原型链上的属性)的属性。es6
一个新对象,带着指定的原型对象和属性。app
const person = { isHuman: false, printIntroduction: function () { console.log(123); } }; const me = Object.create(person,{ // foo会成为所建立对象的数据属性,且foo必须为一个对象;可设置新对象的foo属性的可读性,可配置性以及值 foo: { writable:true, configurable:true, value: "hello" } }); me.name = "Matthew"; // "name" is a property set on "me", but not on "person" me.isHuman = true; // inherited properties can be overwritten console.log(me)
经过构造函数来建立对象, 添加的属性是在自身实例下。
Object.create() es6建立对象的另外一种方式,能够理解为继承一个对象, 添加的属性是在原型下。:函数
var a = { rep : 'apple' } var b = new Object(a) console.log(b) // {rep: "apple"} console.log(b.__proto__) // {}
var a = { rep: 'apple' } var b = Object.create(a) console.log(b) // {} console.log(b.__proto__) // {rep: "apple"}
先看看咱们常用的{}建立的对象是什么样子的spa
var o = {a:1}; console.log(o)
再看看使用Object.create()建立对象:prototype
var o = Object.create(null,{ a:{ writable:true, configurable:true, value:'1' } }) console.log(o)
咱们再把上面的例子改成{}3d
var o = Object.create({},{ a:{ writable:true, configurable:true, value:'1' } }) console.log(o)
建立的对象和使用{}建立对象已经很相近了,可是仍是有一点区别:多了一层proto嵌套。
咱们最后再来改一下:code
var o = Object.create(Object.prototype,{ a:{ writable:true, configurable:true, value:'1' } }) console.log(o)