使用Object.create的优点

时间:2011-09-21 19:31:37

标签: javascript javascript-objects ecmascript-5 object-create

this question相似但不同。以下代码来自JavaScript: The Definitive Guide。他基本上定义了一个继承方法,如果它存在,则遵循Object.create,否则使用构造函数和交换原型进行普通的旧Javascript继承。

我的问题是,由于在很多常见的浏览器 IE上都不存在Object.create,甚至尝试使用它有什么意义呢?它肯定会使代码混乱,上一个问题的一位评论者提到了Object.create isn't too fast

那么尝试添加额外代码以便偶尔使用这个ECMA 5函数有什么优势呢?这个函数可能会或可能不会比“旧”这样做慢?

function inherit(p) {
   if (Object.create) // If Object.create() is defined...
      return Object.create(p); // then just use it.

   function f() {}; // Define a dummy constructor function.
   f.prototype = p; // Set its prototype property to p.
   return new f(); // Use f() to create an "heir" of p.
}

1 个答案:

答案 0 :(得分:9)

速度差异不是很明显,因为从本质上说你可能不会创造太多的物体(数百甚至数千不是我所说的很多),如果你和速度是一个关键问题你可能不会在JS中编码,如果上述两种情况都不正确,那么我确信在所有流行的JS引擎的几个版本中,差异可以忽略不计(某些情况已经是这种情况)。 / p>

在回答您的问题时,原因与速度无关,而是因为Object.create设计模式受旧方法的青睐(原因如下所述)其他答案)。它们允许正确使用ES5属性属性(这样可以实现更具伸缩性的对象,从而实现更具伸缩性的应用程序),并且可以帮助继承层次结构。

这是前瞻性工程。如果我们采取“好吧,它没有在任何地方实施,所以让我们的脚不湿”,事情会变得非常缓慢。相反,早期和雄心勃勃的采用有助于行业向前发展,帮助业务决策者支持新技术,帮助开发人员改进和完善新想法和支持框架。我是早期(但预防性和后向兼容)采用的倡导者,因为经验表明等待足够的人来支持技术可能会让你等待太久。对于那些不这么认为的人来说,IE6可能是一个教训。