You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现符合规范的Object.create polyfill解决测试失败问题

Object.create polyfill 实现修复

原代码问题点

  • 处理proto = null的逻辑错误:直接返回{}会导致新对象原型指向Object.prototype,而非要求的null,不符合规范
  • propertiesObject参数处理完全缺失:原代码中只要传入第二个参数就直接无值返回,没有调用Object.defineProperties给新对象设置属性

正确实现代码

Object.create = function(proto, propertiesObject) {
    // 边界校验:无参数/第一个参数不是对象/函数/NULL时抛出类型错误
    if (arguments.length === 0 || (typeof proto !== 'object' && typeof proto !== 'function')) {
        throw new TypeError('Object prototype may only be an Object or null: ' + proto);
    }
    // 用空构造函数创建指定原型的新对象
    function F() {}
    F.prototype = proto;
    const newObj = new F();
    // 如果传入属性配置,调用defineProperties设置属性
    if (typeof propertiesObject !== 'undefined') {
        Object.defineProperties(newObj, propertiesObject);
    }
    return newObj;
};

修复说明

  1. 新增无参数调用的校验逻辑,符合规范要求
  2. 统一使用空构造函数的方式创建对象,当proto = null时,空构造函数的原型设为null,生成的新对象原型自然指向null,满足测试要求
  3. 补充第二个参数的处理逻辑,创建完基础对象后如果传入了属性配置,就调用Object.defineProperties完成属性设置,再返回最终对象

内容的提问来源于stack exchange,提问作者Art

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:00