Object.create()
记录学习:
概念: 方法创建一个新对象,使创建出来的新对象的 _proto_
指向原对象;
语法:
Object.create(proto[,propertiesObject])
参数:
proto
: 新创建对象的原型对象 。
propertiesObject
: 可选,没有指定就为 undefined
, 他是给 新创建 的对象添加自身属性 。
第二个参数他是一个对象,里面的都是 新创建对象的属性,每个属性都有很多方法:
value: 指定属性的属性值;
返回值: 返回一个新对象,带着指定的原型对象 和 属性;
和 new
的区别:
- new 出来的对象有默认的
__proto__
值,create()
没有默认的__proto__
值,需要我们手动传入值 。 - new 的性能比较好。
例子:
1.使用参数2 ,
const obj1 = {
name: '我是obj1的名字',
age: '40'
}
// obj3 的 _proto_ 指向 obj1 对象
const obj3 = Object.create(obj1);
console.log(obj3);
// obj4 的 _proto_ 也指向 obj1 对象,同时给 obj4 添加他自己的属性;
const obj4 = Object.create(obj1, {
name: { value: '年后' },
age: { value: 20 }
});
console.log(obj4);
输出:
2,使用 create()
实现对象的继承
let obj1 = {
name: 'obj1的名字',
age: 23,
info_1: function() {
console.log('obj1的方法')
}
}
let obj2 = Object.create(obj1, {
name: {value: 'obj2'}
})
console.log(obj2)
// 调用 obj1 的方法,可行的
obj2.info_1(); // => obj1的方法
注意:
- 使用
create()
这个方法,是把 obj2 的__proto__
指向 obj1 这个对象,所以,obj2 使用careat()
这个方法后,拥有了 obj1 的方法和属性,都在 obj2 的__proto__
里面,改变他,会改变 obj1 的方法和属性的。
引用老尚的视频: 哔哩哔哩视频链接