推荐答案
function myCreate(proto) {
if (typeof proto !== 'object' && typeof proto !== 'function') {
throw new TypeError('Object prototype may only be an Object or null');
}
function F() {}
F.prototype = proto;
return new F();
}本题详细解读
1. 函数功能
myCreate(proto) 函数用于创建一个新对象,并将该对象的原型设置为传入的 proto 参数。这个函数模拟了 Object.create 的行为。
2. 参数说明
proto:新创建对象的原型对象。可以是null或一个对象。
3. 实现思路
- 参数校验:首先检查
proto的类型,确保它是一个对象或null。如果不是,则抛出TypeError。 - 创建构造函数:定义一个空的构造函数
F。 - 设置原型:将
F的原型设置为传入的proto。 - 返回新对象:通过
new F()创建一个新对象,并返回该对象。由于F的原型已经被设置为proto,因此新对象的原型链会指向proto。
4. 代码解析
if (typeof proto !== 'object' && typeof proto !== 'function'):检查proto是否为对象或函数类型,如果不是则抛出错误。function F() {}:定义一个空的构造函数F。F.prototype = proto:将F的原型设置为proto。return new F():通过new F()创建一个新对象,并返回该对象。
5. 注意事项
- 如果
proto是null,则新对象的原型为null,即它没有原型链。 - 如果
proto是一个对象或函数,则新对象的原型链会指向proto。