2013-05-08 100 views

回答

0

使用的原型是面向对象的设计更好,因为它不能在运行中进行。当使用这个符号obj.member时,它将首先检查非原型版本。原型允许模拟继承,imo javascript有点不好,但我会说如果你正在尝试使用好的面向对象的设计,最好使用原型。您可以使用原型做的另一件事是a.__proto__,即使它已被修改,它也会引用该对象的原型原型

0

在这种情况下只需制作一个常规功能即可。它不仅简单(可能更快),但最重要的是,它避免了全局Array.prototype命名空间的混乱。

原型功能的唯一真正的巨大优势是当你需要做对象定位。使用原型方法可以让所有实例共享相同的函数,而使用闭包需要为每个实例创建一个新的函数。

1

通常,扩展内置原型不受欢迎,因为它可能会中断for循环,并可能与未来的语言扩展冲突,并指出实现可以(并鼓励)独立于ECMA-262扩展语言。

我怀疑绩效差异是否显着。将洗牌功能添加到需要洗牌的对象比将内置的Array原型添加到洗牌功能更为常见,尽管用于洗牌的通用代码可能处于独立功能并被重新使用。

如果您打算为对象添加洗牌,那么原型继承是一个不错的选择,因为它易于识别和理解,因此维护应该很容易。此外,它可以高效地使用内存和处理(尽管对于少数功能来说,差异是微不足道的)。

+1

当然,与此同时,使用'for in'循环迭代数组也是不鼓励的:) – 2013-05-08 02:59:29

+0

另外,值得一提的是,使用Object.defineProperty(在旧版浏览器中不支持)如果正确使用,可以“修正”枚举问题 – Ian 2013-05-08 03:13:35

+0

@ Jack-不使用for..in的主要原因与数组无关,与原型上的枚举属性无关。这是因为枚举顺序不能得到保证,并且可能返回非数字属性(包括原型上的那些属性),这可能是意想不到的。这也是一个指标,一个数组可能被用在一个普通对象更适合的地方。否则,对数组(例如稀疏数组)进行迭代很好,只要管理风险即可。 – RobG 2013-05-08 04:37:31

相关问题