手写 Object.create

题目:用构造函数 + 原型链模拟 Object.create(proto),让新对象的原型指向 proto。

function create(proto) {
  function F() {}
  F.prototype = proto;       // 把原型挂到中间构造函数上
  F.prototype.constructor = F;
  return new F();            // 返回新对象
}

补充

补充:原笔记里写成了 function create = function (proto) {...},这是非法语法——函数声明不能加 =。Object.create 的规范行为还包括:第二个参数是属性描述符对象(类似 Object.defineProperties),面试如果问「属性可写/可枚举」可顺手补全。

// 简易版(支持第二个属性参数)
function create(proto, properties) {
  function F() {}
  F.prototype = proto;
  const obj = new F();
  if (properties) {
    Object.defineProperties(obj, properties);
  }
  return obj;
}