Object.create-模拟实现,简单易懂

250 阅读1分钟

作用:以传入的对象为原型,创建一个新对象。

知识储备

  • 每个函数都有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里一样可以传入属性的描述符(可配置、可枚举、可写等)