Javascript 在将函数定义为Object.prototype扩展还是仅定义函数之前,应该考虑什么?

Javascript 在将函数定义为Object.prototype扩展还是仅定义函数之前,应该考虑什么?,javascript,performance,function,prototype,Javascript,Performance,Function,Prototype,例如,我必须在字符串中添加'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 dat

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

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

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

第二个是更为实用的函数。
另外请注意,您还可以将第二个foo应用于非字符串的变量,因此如果您希望将参数的使用限制为字符串参数,则还应测试参数的类型。

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

第二个是更为实用的函数。
另外请注意,您还可以将第二个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"
下面是有关修改全局对象及其缺点的进一步阅读:


在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"
下面是有关修改全局对象及其缺点的进一步阅读:


在第一个示例中,您使用的是
上下文,但在后面的示例中,您使用的是参数。。只要您知道自己在做什么,这两种做法都是可以的。在第一个示例中,您使用的是
上下文,但在后面的示例中,您使用的是参数。。只要你知道自己在做什么,这两种做法都可以。。