Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему работает такая конструкция (https://javascript.ru/forum/misc/60489-pochemu-rabotaet-takaya-konstrukciya.html)

Keramet 03.01.2016 16:49

Почему работает такая конструкция
 
var str = "(096)99::00:775";
	var str2 = str 
		.replace("::", "-")
		.replace(":", "-");
	alert(str2);

Смущают меня строки 2, 3 и 4. Где можно прочитать про то, почему это работает и увидеть ещё какие-нибудь "штучки" наподобие этого?

P.S. мне это чем-то напоминает инструкцию with

Lemme 03.01.2016 17:05

Причем тут with? replace - метод объекта String.

А дальше:

Обыкновенный chaining (цепочка вызовов).

https://learn.javascript.ru/object-m...B2%D0%BE%D0%B2

googlecallback 03.01.2016 19:21

Цитата:

Сообщение от Lemme
Причем тут with?

Это действительно напоминает with. тут явно пропихивается контекст через возвраты, через with тоже можно протащить контекст, без явных возвратов. Это похоже на такие цепочки, только круче.

googlecallback 03.01.2016 19:28

По сабжу.

вот вам наглядный пример, как это работает
someObject = {
 a: 1,
 firstStep: function(){this.a++; return this},
 secondStep: function(){this.a++; return this}
}

alert(someObject.firstStep().secondStep().a)

тут вы явно пропихиваете контекст через возвраты. С with было бы так
someObject = {
 a: 1,
 firstStep: function(){this.a++},
 secondStep: function(){this.a++}
}
with(someObject) firstStep(), secondStep(), alert(a)

Keramet 03.01.2016 20:40

googlecallback,
Спс

googlecallback 03.01.2016 21:28

Keramet,
Только один нюанс. В Вашем примере мы имеем дело с возвратом нового объекта, там данные не мутируют. Точней ваш случай можо проилюстрировать вот этим примером
someObject = function(value){
  this.value = value
}
someObject.prototype.add = function(n){return new someObject(this.value + n)}

alert( new someObject(1).add(1).add(2).value)

т.e. тот же самый принцип, только ничего не меняем. эдакая монада.


Часовой пояс GMT +3, время: 04:25.