2009-11-09 14 views
5

Estaba a punto de crear una función de corte en javascript, pero como no quiero reinventar la rueda busqué en Google este método.
He encontrado este enlace http://www.somacon.com/p355.php¿Debo modificar el prototipo de String?

La solución que se proporciona:

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 
String.prototype.ltrim = function() { 
    return this.replace(/^\s+/,""); 
} 
String.prototype.rtrim = function() { 
    return this.replace(/\s+$/,""); 
} 
también

que dice si Don'y Wnt para cambiar el prototipo de la cadena a continuación, utilizar esto:

function trim(stringToTrim) { 
    return stringToTrim.replace(/^\s+|\s+$/g,""); 
} 
function ltrim(stringToTrim) { 
    return stringToTrim.replace(/^\s+/,""); 
} 
function rtrim(stringToTrim) { 
    return stringToTrim.replace(/\s+$/,""); 
} 

Me gustaría saber en qué caso uno debería no modificar el prototipo de Cadena o decir cualquier objeto.

Respuesta

7

Los trim funciones han de ser estandarizado en ECMAScript Quinta edición, además de estar ya presente en algunos navegadores . Por lo tanto:

  1. Sí, añadiéndolos al prototipo es totalmente apropiado, pero

  2. no debe agregar que el prototipo si están ya allí, ya que sólo va a sustituir una función rápida de código nativo con JavaScript lento.

Está también suelen marginalmente más rápida de hacer el ajuste como dos sustituye:

// Add ECMA262-5 string trim if not supported natively 
// 
if (!('trim' in String.prototype)) { 
    String.prototype.trim= function() { 
     return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
    }; 
} 
+1

+1 para 'if (! ('Trim' en String.prototype)) {' –

+0

¿Qué pasa con if (! String.prototype.trim)? Me parece más eficiente. – KooiInc

+3

'in' es más explícito acerca de lo que está probando, sin depender de la veracidad de una propiedad o la extravagante y terrible peculiaridad de JavaScript de resintonizar un nuevo' 'no definido'' para algo que cualquier otro idioma consideraría una excepción. Para este caso particular, por supuesto, no importa para nada, pero en general siempre uso 'in' para probar si un objeto tiene una propiedad. – bobince

1

Para este tipo de función de utilidad muy útil, diría que puede modificar el prototipo. Pero debe tener en cuenta que la función ya puede existir de forma nativa en unos pocos navegadores, por lo que debe comprobar que: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String

+0

y en el que caso de que no debería, es que relacionado con algún tipo de sobrecarga o qué? –

+0

no hay caso de "no debería", solo tenga en cuenta lo que dijo Fabien. –

+0

great javascript 1.8.1 tiene el método string.trim() https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim –

2

En general - no modificar un prototipo de objetos Buildin. Pero, por supuesto, puede agregar su función práctica.

Y compruebe siempre antes de agregar:

//pre-1.6 javascript 
if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(elt) { 
     var len = this.length >>> 0; 
     var from = Number(arguments[1]) || 0; 
     from = (from < 0) ? Math.ceil(from) : Math.floor(from); 
     if (from < 0) 
      from += len; 
     for (; from < len; from++) { 
      if (from in this && this[from] === elt) 
       return from; 
     } 
     return -1; 
    }; 
} 

esta manera que no sobrescribir papilla más rápido edifi función que pueda estar disponible en algún momento ...