在javascript中扩展Object.create()

在javascript中扩展Object.create(),javascript,oop,object-create,Javascript,Oop,Object Create,我正在扩展Object.create()以获取第二个参数,例如 if (typeof Object.create !== 'function') { Object.create = function (o,arg) { function F() {} F.prototype = o; return new F(arg); }; } //could be multiple of these objects that hold dat

我正在扩展
Object.create()
以获取第二个参数,例如

if (typeof Object.create !== 'function') {
    Object.create = function (o,arg) {
        function F() {}
        F.prototype = o;
        return new F(arg);
    };
}

//could be multiple of these objects that hold data
var a = {
  b : 2
};

var c = function(data){
  return{
    d : Object.create(data)
  };
};

//create new instance of c object and pass some data
var newObj = function(arg){
  return(Object.create(c(arg)))
}

var e = newObj(a);
e.d.b = 5;
var f = newObj(a);
console.log(e.d.b);
console.log(f.d.b);

我只是想知道以这种方式使用
Object.create()
是否有任何缺陷?如果我要使用这个函数,我会对
Object.create()
函数中的arg参数做一些额外的检查,但主要的一点是要找出这是否会导致任何问题或是过度杀伤力等等。

是的,一个非常大的陷阱:你踩到了的脚趾

Object.create
已经使用了第二个参数,即将键映射到属性描述符的对象


这一个在较旧的环境中很难填充,这就是为什么它仍然被广泛忽略的原因,但当它变得更普遍时,您的垫片将与标准非常不匹配。

谢谢,我直接认为它不适合这样处理它,事实上,我只看过你的文本。我只是看了一下代码,实际上您没有使用第二个参数来创建
Object.create
,在这个实现中您也不能这样做。(
newf(arg)
实际上只做
newf()
)。所以我现在对此有点困惑。但是使用
对象时不应该遇到任何麻烦。按您的方式创建
。你根本不需要任何特殊的垫片。仅使用第一个参数。的可能重复项。在您的例子中,从
c()
的返回对象继承没有多大意义,因为
d
属性已经是唯一的。