Строковый объект по сравнению с литералом - изменение прототипа?
Мне интересно, почему кажется, что добавление метода к прототипу строкового литерала работает, а добавление свойства - нет? Я играл с идеями относительноэтот вопроси иметь следующий код:
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.
Что происходит?