Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2016, 16:49
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

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

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

P.S. мне это чем-то напоминает инструкцию with
Ответить с цитированием
  #2 (permalink)  
Старый 03.01.2016, 17:05
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

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

А дальше:

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

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

Последний раз редактировалось Lemme, 03.01.2016 в 17:07.
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2016, 19:21
Интересующийся
Посмотреть профиль Найти все сообщения от googlecallback
 
Регистрация: 03.01.2016
Сообщений: 18

Сообщение от Lemme
Причем тут with?
Это действительно напоминает with. тут явно пропихивается контекст через возвраты, через with тоже можно протащить контекст, без явных возвратов. Это похоже на такие цепочки, только круче.
Ответить с цитированием
  #4 (permalink)  
Старый 03.01.2016, 19:28
Интересующийся
Посмотреть профиль Найти все сообщения от googlecallback
 
Регистрация: 03.01.2016
Сообщений: 18

По сабжу.

вот вам наглядный пример, как это работает
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)
Ответить с цитированием
  #5 (permalink)  
Старый 03.01.2016, 20:40
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

googlecallback,
Спс
Ответить с цитированием
  #6 (permalink)  
Старый 03.01.2016, 21:28
Интересующийся
Посмотреть профиль Найти все сообщения от googlecallback
 
Регистрация: 03.01.2016
Сообщений: 18

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. тот же самый принцип, только ничего не меняем. эдакая монада.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В Mozilla работает а в Opera нет почему? alex2012 Общие вопросы Javascript 2 03.08.2013 22:43
Почему не работает такой обработчик? Sirius-jack Общие вопросы Javascript 6 04.05.2013 17:26
Не пойму почему не работает код? Mukhtar Events/DOM/Window 4 29.04.2013 00:01
Почему не работает из PHP? Pumych Элементы интерфейса 6 12.02.2011 13:51
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01