在JavaScript和Node.js中向String类添加函数有什么性能影响?

Kir*_*met 9 javascript performance jquery node.js

在JavaScript中向String类添加函数有什么影响?这是一个坏主意吗?例如,

// String functions
String.prototype.startsWith = function(string) {
    return (this.indexOf(string) === 0);
}
String.prototype.empty = function() {
    //console.log($.trim(this.valueOf()));
    if($.trim(this.valueOf()) == '') {
        return true;
    }
    else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

isa*_*acs 12

在性能方面,没有效果.

但它仍然不是一个好主意,imo.你现在依赖于全球改变的状态.如果其他模块做同样的事情会发生什么?或者更糟糕的是,做一个稍微不同的事情,但使用相同的名称?哎哟.

最好只定义带有String参数的函数,然后使用这些函数.


Par*_*ris 7

首先,原型比对象上的函数慢.创建一个函数有成本和查找.在原型上查找比在普通对象上查找更昂贵

看看这个JSPerf:http://jsperf.com/prototype-methods-vs-object-methods

这是设置:

<script>
Benchmark.prototype.setup = function() {
    function Bob() {
    }

    var b = new Bob();
    Bob.prototype.testproto = function() {};
    b.testobj = function() {};
};
</script>
Run Code Online (Sandbox Code Playgroud)

对象方法v原型

话虽如此,在字符串原型上添加内容与将其添加到任何其他原型没有什么不同.