使用Object.create的优点

Ada*_*kis 10 javascript javascript-objects ecmascript-5 object-create

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

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

那么尝试添加额外代码以便偶尔使用这个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.
}
Run Code Online (Sandbox Code Playgroud)

dav*_*vin 9

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

在回答你的问题,原因不是速度相关,但由于设计模式Object.create被青睐的老方法(在和其他的答案中概述的原因).它们允许正确使用ES5属性属性(这使得更具可伸缩性的对象,从而实现更具可扩展性的应用程序),并且可以帮助继承层次结构.

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