【问题标题】:extending Object.create() in javascript在 javascript 中扩展 Object.create()
【发布时间】:2014-01-08 11:55:21
【问题描述】:

我正在扩展 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 参数做一些额外的检查,但重点是要找出这是否会导致任何问题或过度杀伤等。

【问题讨论】:

标签: javascript oop object-create


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我确实认为像这样弄乱它是不对的,应该实际查看文档,我会看到的。
  • 其实我只看过你的文字。我只是查看了代码,您实际上并没有使用 Object.create 的第二个参数,也不能在这个实现中使用。 (new F(arg) 真的不会比new F() 做更多的事情)。所以我现在对此有点困惑。但是您不应该像您那样使用Object.create 遇到任何麻烦。您根本不需要任何特殊的垫片。您只使用第一个参数。
猜你喜欢
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2021-10-14
  • 2013-09-04
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多