С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131

Нужно расшифровать код

21.04.2014, 18:04. Показов 1005. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашёл код.
Некоторые вещи в нём непонятны, хочется очень их расшифровать.
То что код делает, понятно, вопросы в самом коде.
Помогите пожалуйста.

http://learn.javascript.ru/play/is4l8

Что делается тут?
JavaScript
1
this.onClick.bind(this);
При клике должно выполняться это
JavaScript
1
this.onClick.bind(this);
Это значит так
JavaScript
1
dom.onClick.bind(dom);
Зачем dom передаётся в метод bind ?
----------------------
И как к этой всей функции применяется метод .init() ? Это ведь метод объекта dom и писаться он должен так
JavaScript
1
dom.init();

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
({
    dom: {
        window: window,
        document: document
    },
    writeToConsole: function() {
        console.log.apply(console, arguments);
    },
    showModalWindow: function() {
        alert.apply(this.dom.window, arguments);
    },
    onClick: function(event) {
        var msg = 'x=' + event.pageX + ', y=' + event.pageY;
        this.writeToConsole(msg);
        this.showModalWindow(msg);
    },
    init: function() {
        this.dom.document.onclick = this.onClick.bind(this);
    }
}).init();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2014, 18:04
Ответы с готовыми решениями:

Нужно расшифровать код
люди помогите расшифровать плиз <SCRIPT LANGUAGE="JavaScript"> <!-- function Decode(){var...

нужно расшифровать
К сожалению, нет времени сейчас учить JS. Очень необходимо расшифровать этот код: что он делает, что значит та или иная строка кода?? ...

Расшифровать код
Господа умельцы, может кто нибудь поможет расшифровать эту краказябру или подскажет утилиту или онлайн сервис, буду очень благодарен! ...

6
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
21.04.2014, 20:47
Это значит так
JavaScript
1
dom.onClick.bind(dom);
Вот отсюда ваше непонимание и пошло. В метод bind передаётся контекст объекта в котором есть 4 метода и свойство dom. С помощью bind выполняется привязка контекста для того, чтобы при клике по document в методе onClick нашего объекта this ссылался на сам объект, а не на document (за кадром привязка осуществляется через замыкание с использованием apply).
И как к этой всей функции применяется метод .init() ? Это ведь метод объекта dom
Каким боком init относится к dom непонятно. dom в данном случае нужен всего лишь для обозначения самого объекта к которому подключается обработчик события onclick.
Что касается метода init, то здесь используется так называемый шаблон немедленной инициализации объекта. То есть следующие конструкции допустимы:
JavaScript
1
2
({...}).init(); // вызываем сразу же метод init у созданного объекта
({}.init()); // тоже самое
Фактически такая инициализация избавляет нас от необходимости создания переменной и последующего вызова нужного метода инициализации.
1
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
22.04.2014, 07:18  [ТС]
Что это за конструкция?
({})
Объект без имени? Как он используется и как к нему обращаться?
Как используется слово this в этой конструкции? К чему оно обращается?
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
22.04.2014, 10:25
Цитата Сообщение от koderman Посмотреть сообщение
Что это за конструкция?
({})
Эта конструкция называется немедленной инициализацией объекта. Она аналогична
функции вызываемой на месте: (function(){})();
В контексте данной задачи можно обойтись без имени объекта, чтобы
не плодить еще одну переменную. Поэтому здесь уместно использовать
данную конструкцию. Один раз вызвали init на месте, обработчик проинициализировался
получил доступ ко всем методам и всё замечательно.
Технически получить доступ извне к данному объекту сейчас нельзя. Но можно сделать
так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var obj = ({
    dom: {
        window: window,
        document: document
    },
    writeToConsole: function() {
        console.log.apply(console, arguments);
    },
    showModalWindow: function() {
        alert.apply(this.dom.window, arguments);
    },
    onClick: function(event) {
        var msg = 'x=' + event.pageX + ', y=' + event.pageY;
        this.writeToConsole(msg);
        this.showModalWindow(msg);
    },
    init: function() {
        this.dom.document.onclick = this.onClick.bind(this);
        return this;
    }
}).init();
 
console.log(obj); // возвратили объект
Ключевое слово this здесь используется как и везде. Ничего нового.
Внутри метода при непосредственном вызове ссылается на сам объект:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
({
    dom: {
        window: window,
        document: document
    },
    writeToConsole: function() {
        console.log.apply(console, arguments);
    },
    showModalWindow: function() {
        alert.apply(this.dom.window, arguments);
    },
    onClick: function(event) {
        var msg = 'x=' + event.pageX + ', y=' + event.pageY;
        this.writeToConsole(msg);
        this.showModalWindow(msg);
    },
    init: function() {
        this.dom.document.onclick = this.onClick.bind(this);
        console.log(this); // здесь this ссылается на сам объект
    }
}).init();
При вызове с обработчиком события без использования bind:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
({
    dom: {
        window: window,
        document: document
    },
    writeToConsole: function() {
        console.log.apply(console, arguments);
    },
    showModalWindow: function() {
        alert.apply(this.dom.window, arguments);
    },
    onClick: function(event) {
        var msg = 'x=' + event.pageX + ', y=' + event.pageY;
        console.log(this); // здесь this ссылается на this.dom.document - на объект перед точкой перед onclick и ниже будет ошибка
        this.writeToConsole(msg);
        this.showModalWindow(msg);
        
    },
    init: function() {
        this.dom.document.onclick = this.onClick;
    }
}).init();
И с привязкой нужного контекста через bind:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var obj = ({
    dom: {
        window: window,
        document: document
    },
    writeToConsole: function() {
        console.log.apply(console, arguments);
    },
    showModalWindow: function() {
        alert.apply(this.dom.window, arguments);
    },
    onClick: function(event) {
        var msg = 'x=' + event.pageX + ', y=' + event.pageY;
         console.log(this); // здесь this ссылается на наш объект так как привязку сделали через bind и правило this - объект перед точкой выполняться не будет
        this.writeToConsole(msg);
        this.showModalWindow(msg);
    },
    init: function() {
        this.dom.document.onclick = this.onClick.bind(this);
        return this;
    }
}).init();
1
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
22.04.2014, 12:20  [ТС]
Цитата Сообщение от vovandr Посмотреть сообщение
console.log(this); // здесь this ссылается на this.dom.document
Что определяет на что ссылается this? Тут вообще непонятно почему this ссылается на this.dom.document.
Почему если через bind() вызвали функцию, то в функции onClick, this ссылаются на объект?
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
22.04.2014, 12:21
Что определяет на что ссылается this?
Определяется контекстом вызова...this определяется в момент вызова.
1
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
22.04.2014, 12:26  [ТС]
Я как раз этот контекст тут и не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2014, 12:26
Помогаю со студенческими работами здесь

Как расшифровать это js код:
Всем привет! Есть js код, который зашифрован. Как его расшифровать? Вот: 23 H=["\W\k\N\

Надо расшифровать код JavaScript
Скрипт для блокировки Яндекс.Советника: https://sovetniku.net/media/script/19/antisovetnik.js Как он зашифрован?

Нужно расшифровать код
Есть код, который делает фильтр по языку. Раньше работал, после обновления плагина перестал. Я код скопировал и вставил как нужно. ...

Нужно расшифровать код
Это код python. Чтобы его расшифровать, нужно расставить куски сообщения в порядке уменьшения ID куска.

Нужно расшифровать код
Доброе утро форум! Что означает выделенная строка, а именно что означает 5,6 макрос расчета raschet macro mov ax,A ;A add ax,B...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru