加原型有一个问题是 @kmxz 所说的运行环境限制
另一个更大的问题在于可能会冲突,想想如果你用了两个框架,其中A往String.prototype上加了两个方法,B也加了两个方法,万一其中一个不小心重名了。。。就只能比script标签顺序了。因此很早之前大家就有了类似的约定,干脆大家都不加prototype,免得冲突。
所以若你这个项目比较小只有那么一两个人开发,你用prototype无所谓(因为现代框架基本都不会用),但若是一堆人一起的工程项目,还是方法吧。
JS工程上类似避免冲突的东西还有很多,比如隔离$占用冲突:
(function($) {
... // 所有代码都在这里
})(jQuery);
比如隔离方法名/类名冲突:
// 每一个.js文件开头
var Baidu = Baidu || {};
Baidu.utils = Baidu.utils || {};
Baidu.utils.MyClass = function() { ... };
都是为了解决协作框架/代码冲突问题