Строковый объект по сравнению с литералом - изменение прототипа?

Мне интересно, почему кажется, что добавление метода к прототипу строкового литерала работает, а добавление свойства - нет? Я играл с идеями относительноэтот вопроси иметь следующий код:

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));
​

Это отлично работает. Однако, если я изменю третью последнюю строку на:

var testString = 'Loremipsumdolorsitamet,consectetur';

... кажется, что хотя метод_str_substr существует и может вызываться на строковом литерале, значение свойства_str_index1 всегда 0.

Что происходит?

Ответы на вопрос(2)

Ваш ответ на вопрос