powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Модули, замыкания и прочие азы
20 сообщений из 20, страница 1 из 1
Модули, замыкания и прочие азы
    #38100023
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот в книжечке нашел пример кода:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Function.prototype.addMethod = function (methodName, methodBody) {
            this.prototype[methodName] = methodBody;
            return this;// Обеспечивает возможность каскадирования вызовов addMethod.
        }

String.addMethod('deentityifi', function () {

            var entity = {
                qout: '"',
                lt: '<',
                gt: '>'
            };

            return function () {
                return this.replace(/&([A&;]+);/g, function (a, b) {
                    var r = entity[b];
                    return typeof r === 'string' ? r : a;
                });
            };
        }());

        document.writeln('&lt;&quot;&gt;'.deentityifi());



и стало интересно, а чем собственно он будет отличаться от:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
String.addMethod('deentityifi', function () {

            var entity = {
                qout: '"',
                lt: '<',
                gt: '>'
            };

            return this.replace(/&([A&;]+);/g, function (a, b) {
                var r = entity[b];
                return typeof r === 'string' ? r : a;
            });
        });



?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100027
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxxа чем собственно он будет отличатьсятипом возвращаемого результата
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100043
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

Почему? В обоих случаях членом deentityifi в прототипе станет функция, которая будет выполнять одни и те же действия.
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100056
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Паганель, не могли бы Вы более детально разъяснить, как различаются типы возвращаемого результата в первом и втором случаях?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100061
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxx
Код: javascript
1.
            return function () {

Код: javascript
1.
            return this.replace(/&([A&;]+);/g, function (a, b) {

http://javascript.ru/String/replace Этот метод не меняет вызывающую строку, а возвращает новую, после замен.чего тут еще подробнее объяснять, я не понимаю
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100066
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганельчего тут еще подробнее объяснять, я не понимаю
Обратите пожалуйста внимание на реализацию метода Function.prototype.addMethod, на }()); в первой реализации, и }); во второй. В обоих случаях String.deentityifi будет функция, но в первом случае переменная entity будет доступна этой функции через замыкание,а во втором она будет являться собственной локальной переменной функции. Хотелось бы узнать в чем выгода первого способа (а в книжке к нему даже применен эпитет "идеальный")?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100072
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, ну да, скобок я и не заметил:)
тогда не знаю
это наверное что-то из области комбинаторов неподвижных точек... как-то в жизни мне не приходилось такое творить
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100080
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно что означают слова "объект будет обрабатываться при каждом вызове функции"?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100118
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну... для этого надо знать как работает интерпретатор
я - не знаю
могу только догадываться, что каждый раз, выполняя функцию,
он должен под все локакльные переменные выделить память и (если указано) проинициализировать данными
наверное, это замедляет работу функции на какие-то наносекунды
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100124
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

Я думал что значения из прототипа копируются во все экземпляры объекта. Следовательно во всех экземплярах, имеющих метод deentityifi, прицепленный к прототипу, имеется ссылка на один и тот же метод, а в нем всего одна копия этого entity. (Интересно, а мои мысли о прототипе соответствуют действительности?) И тогда непонятно, что он понимает под обработкой этого объекта?!
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100137
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю

код
Код: javascript
1.
2.
console.log('string1'.deentityifi);
console.log('string2'.deentityifi);

мне что-то ответа не дал
затрудняюсь придумать эксперимент
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100152
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

А разве
Код: javascript
1.
alert('str1'.deentityifi === 'str2'.deentityifi);

не подойдет?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100168
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не знаю говорит ли это о копировании данных
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100173
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxx, откуда взяли пример? Что за книга?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100178
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100203
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганелья не знаю говорит ли это о копировании данных

Судя по примеру кода и по тому, что при создании нескольких экземпляров объектов их свойства, унаследованные от прототипа, можно менять в каждом экземпляре независимо от других экземпляров, похоже что в каждый вновь созданный экземпляр объекта просто копируются значения из свойств объекта-прототипа.
И судя по
Код: javascript
1.
alert('str1'.deentityifi === 'str2'.deentityifi);// true

копируется ссылка на функцию, а не сама функция. Или это на меня навеяло понятием ссылочных типов из C#. :)
Кто знает правду, подскажите! :)
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100562
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxxпохоже что в каждый вновь созданный экземпляр объекта просто копируются значения из свойств объекта-прототипа. 13635132
и весь топик почитай
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100609
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

А что там нового написано? Кроме того мне кажется что фраза "однако в объекте, созданном через new Foo(), есть скрытое поле-ссылка (назовем ее "__proto__"), которая ссылается на тот же объект, на который ссылается Foo.prototype (на момент вызова new Foo())" не совсем верна. Так как если бы все созданные через new объекты ссылались бы на один и тот же экземпляр "прототипного объекта", то это привело бы к тому, что изменение значения свойства из прототипа в одном экземпляре объекта приводило бы к отображению этого изменения в остальных экземплярах, в том числе и вновь созданных. Так что похоже каждый объект имеет свой экземпляр "прототипного объекта". Хотя то, что при добавлении свойства в прототип это свойство появляется у всех созданных ранее экземпляров объектов говорит нам о том что "исходный прототипный объект" имеет связь со всеми уже созданными экземплярами объектов. Короче там какой-то хитрый механизм имеется! ) Вроде у каждого экземпляра есть свои копия "прототипного объекта", но добавление свойства в прототип добавляет его и во все его копии у созданных экземпляров.
Никто не знает какой нибудь источник, где хорошо описан этот механизм?
И по основному вопросу темы, так в чем же идеальность первой реализации String.addMethod('deentityifi',...?
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100845
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexxxxxТак как если бы все созданные через new объекты ссылались бы на один и тот же экземпляр "прототипного объекта", то это привело бы к тому, что изменение значения свойства из прототипа в одном экземпляре объекта приводило бы к отображению этого изменения в остальных экземплярах, в том числе и вновь созданных.нет.

в момент присвоения новое значение свойства будет записано в сам объект, а не в его прототип. и далее будет считываться с самого объекта (не придется заглядывать в прототипы).

с другой стороны, пример
Код: javascript
1.
2.
3.
4.
5.
6.
7.
Foo.prototype.myProp = {a: 1, b: 2};

var x = new Foo();
var y = new Foo();

x.myProp.a = 55;
alert(y.myProp.b); // 55

подтверждает, что изначально прототипное свойство - общее для всех экземпляров.

LexxxxxТак что похоже каждый объект имеет свой экземпляр "прототипного объекта". Хотя то, что при добавлении свойства в прототип это свойство появляется у всех созданных ранее экземпляров объектов говорит нам о том что "исходный прототипный объект" имеет связь со всеми уже созданными экземплярами объектов. Короче там какой-то хитрый механизм имеется! ) Вроде у каждого экземпляра есть свои копия "прототипного объекта", но добавление свойства в прототип добавляет его и во все его копии у созданных экземпляров.
Никто не знает какой нибудь источник, где хорошо описан этот механизм?поскольку указанного механизма (с копиями прототипов) нет в природе, то и источника с описанием тоже нет (кроме, разумеется, 13726297 )

LexxxxxИ по основному вопросу темы, так в чем же идеальность первой реализации String.addMethod('deentityifi',...?в первом случае всегда используется один и тот же объект entity, во втором - каждый раз создается при вызове deentityifi.
разумеется, нет смысла каждый раз создавать его заново, потому первый вариант лучше.
...
Рейтинг: 0 / 0
Модули, замыкания и прочие азы
    #38100864
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

Спасибо.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Модули, замыкания и прочие азы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]