手写原理 | Object.create

MDN 文档

Object.create()方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型。

语法如下:

1
2
Object.create(proto);
Object.create(proto, propertiesObject);

参数说明:

proto:新建对象的原型对象

propertiesObject(可选):传入对象的可枚举属性将为新创建的对象添加指定的属性值和对应的属性描述符,这些属性对应于Object.defineProperties()的第二个参数

返回值:

一个新对象,带着指定的原型对象及其属性

手写Object.create()

实现思路:定义一个空的构造函数,把构造函数的原型指定为传入的对象,利用new构造函数,返回构造函数的实例,达到创建空对象的目的

1
2
3
4
5
Object.prototype.myCreate = function(obj) {
function Fn() {};
Fn.prototype = obj;
return new Fn();
};

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let obj = {
name: 'Katrina',
age: 18,
};

// Object.create()
let p1 = Object.create(obj);
console.log(p1.__proto__ === obj); // true

// Object.myCreate();
let p2 = Object.myCreate(obj);
console.log(p2.__proto__ === obj); // true


// 测试
console.log(p1 instanceof obj.constructor); // true
console.log(p2 instanceof obj.constructor); // true

知识补充

手写new

手写instanceof