如果您需要Object.create
,很有可能您还需要依赖其他 es5 功能。因此,在大多数情况下,适当的解决方案是使用es5-shim。
但是,如果Object.create
是您唯一需要的东西,并且您只使用它来纯粹设置原型链,那么这里有一个轻量级的 poly-fill,它不支持null
作为第一个参数,也不支持第二个properties
参数。
这是规格:
15.2.3.5 Object.create(O[,属性])
create 函数创建一个具有指定原型的新对象。调用 create 函数时,会执行以下步骤:
如果 Type(O) 不是 Object 或 Null,则抛出 TypeError 异常。
让 obj 成为创建新对象的结果,就像通过表达式 new Object() 一样,其中 Object 是具有该名称的标准内置构造函数
将 obj 的 [[Prototype]] 内部属性设置为 O。
如果参数 Properties 存在且未定义,则将自己的属性添加到 obj,就像通过使用参数 obj 和 Properties 调用标准内置函数 Object.defineProperties 一样。
返回对象。
这是轻量级实现:
if (!Object.create) {
Object.create = function(o, properties) {
if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o);
else if (o === null) throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");
if (typeof properties != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");
function F() {}
F.prototype = o;
return new F();
};
}