实现 Object.create 方法
# 实现 Object.create 方法
# 功能描述
Object.create()
方法创建一个新对象,使用现有的对象来提供新创建的对象的 __proto__
(新对象的 __proto__
属性会指向原对象)。
# 手写实现
function objectCreate(obj) {
// 排除传入的是非 object 的情况
if (typeof obj !== 'object') {
throw new TypeError(`Object prototype may only be an Object or null: ${obj}`);
}
// 让空对象的 __proto__ 指向传进来的对象(prototype)
// 目标 {}.__proto__ = prototype
function F() {}
F.prototype = obj;
return new F();
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 测试用例
let obj = {
name: 'test',
colors: ['red', 'green', 'blue']
};
// 对比两个输出结果
console.log('Object.create()', Object.create(obj))
console.log('objectCreate()', objectCreate(obj))
1
2
3
4
5
6
7
2
3
4
5
6
7
# 注意事项
原生的 Object.create(proto,[propertiesObject])
方法支持两个参数:
proto
:必须,表示新建对象的原型对象。propertiesObject
:可选,需要传入一个对象。如果该参数被指定且不为undefined
,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将添加到新创建对象。
此处我们手写实现的函数省略了对第二个参数的支持。
(完)