0

我正在扩展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()以这种方式使用是否有任何陷阱?如果我要使用它,我会对函数中的 arg 参数进行一些额外的检查,Object.create()但重点是找出这是否会导致任何问题或是否过度杀伤等。

4

1 回答 1

1

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

Object.create已经接受了第二个参数,一个对象映射键到属性描述符。

这个很难在旧环境中进行 polyfill,这就是为什么它仍然被广泛忽略的原因,但是当它变得越来越普遍时,你的 shim 将非常不符合标准。

于 2014-01-08T12:06:23.663 回答