0

创建函数的更好做法是什么?

例如,如果我想打乱一个数组,创建一个常规函数或原型函数是一个更好的应用程序吗?使用其中一个有缺点/优点吗?

function shuffleArray(array) {
...
}

或者:

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

3 回答 3

1

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

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

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

于 2013-05-08T02:55:57.723 回答
0

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

于 2013-05-08T02:53:17.243 回答
0

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

原型函数唯一真正的大优势是当您需要面向对象时。使用原型方法可以让所有实例共享相同的函数,而使用闭包则需要为每个实例创建一个新的函数。

于 2013-05-08T02:54:46.450 回答