Objeto de cadena versus literal: ¿modificar el prototipo?

Me pregunto por qué parece que agregar un método al prototipo de un literal de cadena parece funcionar, pero agregar una propiedad no. Estaba jugando con ideas en relación conesta preguntay tiene el siguiente código:

String.prototype._str_index1 = 0;
String.prototype._str_reset = function() {
    this._str_index1 = 0;
};
String.prototype._str_substr = function(len) {
  var ret = this.substr(this._str_index1, len);
  this._str_index1 = this._str_index1 + len;
  return ret;
};

var testString = new String('Loremipsumdolorsitamet,consectetur');
log(testString._str_substr(5));
log(testString._str_substr(4));
​

Esto funciona bien Sin embargo, si cambio la tercera y última línea a:

var testString = 'Loremipsumdolorsitamet,consectetur';

... parece que aunque el método_str_substr existe y es invocable en la cadena literal, el valor de la propiedad_str_index1 siempre es 0.

¿Qué pasa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta