Вы могли использовать механизмы синхронизации (как монитор или semaphor) для проверки, что один запрос журнала обрабатывается прежде, чем принять следующее. Это могло все быть скрыто от кода, назвав регистрирующиеся стандартные программы.
Примитивы String неизменяемы, их нельзя изменить после создания.
Это означает, что символы в них не могут быть изменены и любые операции со строками фактически создавать новые строки.
Возможно, вы хотите реализовать своего рода построитель строк?
function StringBuilder () {
var values = [];
return {
append: function (value) {
values.push(value);
},
toString: function () {
return values.join('');
}
};
}
var sb1 = new StringBuilder();
sb1.append('foo');
sb1.append('bar');
console.log(sb1.toString()); // foobar
Строки неизменяемы; то, что вы спрашиваете, похоже на вопрос: «Почему я не могу сделать:
Number.prototype.accumulate = function (x) {
this = this + x;
};
...?»
Хотя строки неизменяемы, попытка назначить что-нибудь для этот
в любой класс вызовет ошибку.
Я исследовал то же самое... Во-первых, конечно, вы не можете просто сделать this += x, 'this' - это объект, вы не можете использовать оператор + на объектах.
Есть методы, которые вызываются "за сценой" - например,
String.prototype.example = function(){ alert( this ); }
на самом деле вызывает
String.prototype.example = function(){ alert( this.valueOf() ); }
Так что вам нужно найти соответствующее значение, которое делает обратное - что-то вроде this.setValue(). Но такого значения нет. То же самое относится и к Number.
Даже встроенные методы связаны этим
var str = 'aaa';
str.replace( /a/, 'b' );
console.log( str ); // still 'aaa' - replace acts as static function
str = str.replace( /a/, 'b' );
console.log( str ); // 'bbb' - assign result of method back to the object
На некоторых других объектах это возможно; например, на Date:
Date.prototype.example = function(){
this.setMonth( this.getMonth()+6 );
};
var a=new Date();
alert(a.getMonth());
a.example();
alert(a.getMonth());
Это раздражает, но вот так