手写实现 Object.create
Object.create 方法用于创建一个新对象,使用指定的原型对象和可选的属性描述符来初始化新对象。手写实现 Object.create 涉及到设置新对象的原型并定义可选的属性。
以下是 Object.create 的简单手写实现:
实现
javascript
function create(proto, propertiesObject) {
// 创建一个临时构造函数
function Temp() {}
// 将临时构造函数的原型指向指定的原型对象
Temp.prototype = proto;
// 创建新对象,并设置其原型
const obj = new Temp();
// 如果传入了属性描述符对象,则使用 Object.defineProperties 来定义属性
if (propertiesObject !== undefined) {
Object.defineProperties(obj, propertiesObject);
}
return obj;
}
// 示例用法
const personPrototype = {
greet() {
console.log('Hello!');
}
};
const john = create(personPrototype, {
name: {
value: 'John',
writable: true,
configurable: true,
enumerable: true
},
age: {
value: 30,
writable: true,
configurable: true,
enumerable: true
}
});
console.log(john.name); // 输出: John
john.greet(); // 输出: Hello!说明
临时构造函数:
javascriptfunction Temp() {}- 创建一个临时构造函数
Temp用于设置新对象的原型。这个构造函数不会有实际的功能,只是为了创建一个新对象来设置原型链。
- 创建一个临时构造函数
设置原型:
javascriptTemp.prototype = proto;- 将
Temp.prototype设置为传入的原型对象proto。这样,通过new Temp()创建的新对象就会具有指定的原型。
- 将
创建新对象:
javascriptconst obj = new Temp();- 使用临时构造函数
Temp创建一个新对象obj,其原型链上会包含proto。
- 使用临时构造函数
定义属性(可选):
javascriptif (propertiesObject !== undefined) { Object.defineProperties(obj, propertiesObject); }- 如果传入了属性描述符对象
propertiesObject,使用Object.defineProperties方法来定义新对象的属性。这样可以设置属性的值、是否可写、是否可配置等。
- 如果传入了属性描述符对象
返回新对象:
javascriptreturn obj;- 返回创建的新对象。
题目要点:
- 目的:
Object.create创建一个新对象,指定其原型,并可选地定义对象属性。 - 实现:
- 使用临时构造函数来设置新对象的原型。
- 可选地使用
Object.defineProperties定义新对象的属性。
这种实现方式模拟了 Object.create 的基本功能,提供了对对象原型链和属性的控制。