例如,我必须在字符串中添加'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