在将函数定义为对象之前,该考虑的想法.预型扩展或仅函数



例如,我必须在字符串中添加'foo'。

所以我至少有两种方法。

首先,我可以实现string.prototype.foo:

String.prototype.foo = function() {
    return this + 'foo';
};
var s = 'str';
var data = s.foo(); // "strfoo"

另一种方式:

function foo(str) {
    return str + 'foo';
}
var s = 'str';
var data = foo(s); // "strfoo"

两者看起来都很漂亮。但是,在选择第一个或第二次实施之前,我应该考虑任何"水下岩石"?是否有任何重要原因,例如效率和绩效?

第一个扩展了字符串的功能。如果您有一类对象,请使用此解决方案,并且想向其添加新的行为。

第二个是实用程序函数。还要注意,您还可以将第二个foo应用于不是字符串的变量,因此,如果您想将使用限制为字符串参数,也应该测试参数的类型。

修改JavaScript中的全球群体始终是一个错误的决定。不要那样做,除非不是要制作多填充。

这些含义是您的代码的多个含义,而不是破坏他人代码的概率。

我将始终使用第二种方法。或者,如果事情真的那么复杂,也许可以实现我自己的字符串类。

function MyString(str) {
    this.str = str;
}
MyString.prototype.foo = function() { return this.str + "foo" };
var s = new MyString("str");
var data = s.foo(); // "strfoo"

这里正在进一步阅读有关修改全局对象和缺点的信息:

https://softwareengineering.stackexchange.com/questions/104320/why-is-extering-the-the-the-dom-built-in-built-in-object-prototypes-a-a-a-bad-idea

最新更新