作用:以传入的对象为原型,创建一个新对象。
知识储备
- 每个函数都有prototype 属性,指向原型。
- 每个对象都有__proto__属性,指向创建该对象的构造的原型。其实它指向的是[[prototype]],但是[[prototype]]是内部属性,我们访问不到,所以使用__proto__来访问。
实现步骤
1. 要创建一个新对象,那么就需要有一个构造器,所以先创建一个临时的空构造函数
2. 然后让这个构造函数的原型 指向 传入的原型地址
3. new 一个对象返回出去
代码实现
function _create(prototype){
function Temp(){}
Temp.prototype = prototype
return new Temp()
}
测试代码
let people = {name:"macrolam",age:"30"}
let obj = _create(people)// obj.__proto__ 是 {name:"macrolam",age:"30"}
ps:
这里是简化版本,实际Object.create()还接收第二个可选参数,与 defineProperty里一样可以传入属性的描述符(可配置、可枚举、可写等)