Objeto de string versus literal - modificando o protótipo?

Eu estou querendo saber por que parece que adicionar um método ao protótipo de uma string literal parece funcionar, mas adicionar uma propriedade não? Eu estava brincando com idéias em relação aessa questãoe tenha o seguinte 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));
​

Isso funciona bem. Se, no entanto, eu alterar a terceira última linha para:

var testString = 'Loremipsumdolorsitamet,consectetur';

... parece que, embora o método_str_substr existe e pode ser chamado na string literal, o valor da propriedade_str_index1 é sempre 0.

E aí?

questionAnswers(2)

yourAnswerToTheQuestion