Я поигрался с jsperf.com и обнаружил, что прототипом функции является В 40 раз медленнее, чем заявленная функция "по умолчанию".
String.prototype.contains = function(s){ return !!~this.indexOf(s) }
= 220 000 операций/с
vs.
function isContains(str, s) { return !!~str.indexOf(s) }
= 8,5 тыс. операций/с
PS Я знаю, что модификация прототипа - не лучший вариант, и ее можно назвать "обезьяньим патчем" :)