什么是更有效或更好的实践,创建常规功能或原型功能?

时间:2013-05-08 02:47:01

标签: javascript prototype

创建函数的最佳做法是什么?

例如,如果我想要对数组进行混洗,那么创建常规函数或原型函数是否是更好的应用程序?是否存在使用其中一个的缺点/优势?

function shuffleArray(array) {
...
}

或:

Array.prototype.shuffle = function() {
..
}

3 个答案:

答案 0 :(得分:1)

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

我怀疑性能差异是否显着。将shuffle功能添加到需要改组的对象比将内置的Array原型更常见,尽管改组某些东西的通用代码可能是一个独立的函数并可以重复使用。

如果要为对象添加改组,那么原型继承是一个很好的选择,因为它易于识别和理解,因此维护应该很容易。此外,它有效地利用了内存和处理(尽管少数功能的差异很小)。

答案 1 :(得分:0)

使用原型更适合面向对象的设计,因为它无法在运行中完成。此外,当使用此表示法obj.member时,它将首先检查非原型版本。原型允许模拟继承,imo javascript只是一种糟糕的语言,但我会说如果你试图使用良好的面向对象设计,最好使用原型。您可以用原型做的另一件事是a.__proto__,它将引用对象的原始原型,即使它已被修改

答案 2 :(得分:0)

在这种情况下,只需做一个常规功能。它不仅简单,而且可能更快,但最重要的是,它避免了使用全局Array.prototype命名空间。

原型功能唯一真正的优势在于您需要进行面向对象。使用prototype方法允许所有实例共享相同的函数,而使用闭包需要为每个实例创建一个新的函数。