Skip to content

Commit a3e2875

Browse files
committed
2 parents de7bc2b + 02577ee commit a3e2875

File tree

9 files changed

+23
-14
lines changed
  • 1-js
  • 10-regular-expressions-javascript/13-regexp-infinite-backtracking-problem
  • 2-ui
    • 1-document/12-multi-insert
    • 2-events-and-interfaces/1-introduction-browser-events
    • 3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave

9 files changed

+23
-14
lines changed

1-js/10-es-modern/4-es-function/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ let g = function() {};
189189

190190
let user = {
191191
// свойство user.sayHi.name == "sayHi"
192-
sayHi: function() { };
193-
}
192+
sayHi: function() {}
193+
};
194194
```
195195

196196
## Функции в блоке

1-js/4-data-structures/7-array/3-create-array/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ var styles = ["Джаз", "Блюз"];
55
styles.push("Рок-н-Ролл");
66
styles[styles.length - 2] = "Классика";
77
alert( styles.shift() );
8-
styles.unshift("Рэп", "Регги ");
8+
styles.unshift("Рэп", "Регги");
99
```
1010

1-js/5-functions-closures/2-closures/article.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,18 +119,18 @@ sayHi.[[Scope]] = window
119119
```js run no-beautify
120120
var phrase = 'Привет';
121121
122-
function say(name) {
122+
function sayHi(name) {
123123
alert(phrase + ', ' + name);
124124
}
125125
126126
*!*
127-
say('Вася'); // Привет, Вася (*)
127+
sayHi('Вася'); // Привет, Вася (*)
128128
*/!*
129129
130130
phrase = 'Пока';
131131
132132
*!*
133-
say('Вася'); // Пока, Вася (**)
133+
sayHi('Вася'); // Пока, Вася (**)
134134
*/!*
135135
```
136136

1-js/9-prototypes/2-new-prototype/4-new-object-same-constructor/solution.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,20 @@ function User(name) {
2222
this.name = name;
2323
}
2424
*!*
25-
User.prototype = {};
25+
User.prototype = {}; // (*)
2626
*/!*
2727

2828
var obj = new User('Вася');
2929
var obj2 = new obj.constructor('Петя');
3030

3131
alert( obj2.name ); // undefined
3232
```
33+
34+
Почему obj2.name равен undefined? Вот как это работает:
35+
36+
1. При вызове new `obj.constructor('Петя')`, `obj` ищет у себя свойство `constructor` -- не находит.
37+
2. Обращается к своему свойству `__proto__`, которое ведёт к прототипу.
38+
3. Прототипом будет (*), пустой объект.
39+
4. Далее здесь также ищется свойство constructor -- его нет.
40+
5. Где ищем дальше? Правильно -- у следующего прототипа выше, а им будет `Object.prototype`.
41+
6. Свойство `Object.prototype.constructor` существует, это встроенный конструктор объектов, который, вообще говоря, не предназначен для вызова с аргументом-строкой, поэтому создаст совсем не то, что ожидается, но то же самое, что вызов `new Object('Петя')`, и у такого объекта не будет `name`.

1-js/9-prototypes/2-new-prototype/article.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,9 @@ if (!Object.create) Object.create = inherit; /* определение inherit -
197197
198198
## Итого
199199
200-
Для произвольной функции -- назовём её `Constructor`, верно следующее:
200+
Для произвольной функции -- назовём её `Person`, верно следующее:
201201
202-
- Прототип `__proto__` новых объектов, создаваемых через `new Constructor`, можно задавать при помощи свойства `Constructor.prototype`.
203-
- Значением `Constructor.prototype` по умолчанию является объект с единственным свойством `constructor`, содержащим ссылку на `Constructor`. Его можно использовать, чтобы из самого объекта получить функцию, которая его создала. Однако, JavaScript никак не поддерживает корректность этого свойства, поэтому программист может его изменить или удалить.
202+
- Прототип `__proto__` новых объектов, создаваемых через `new Person`, можно задавать при помощи свойства `Person.prototype`.
203+
- Значением `Person.prototype` по умолчанию является объект с единственным свойством `constructor`, содержащим ссылку на `Person`. Его можно использовать, чтобы из самого объекта получить функцию, которая его создала. Однако, JavaScript никак не поддерживает корректность этого свойства, поэтому программист может его изменить или удалить.
204204
- Современный метод `Object.create(proto)` можно эмулировать при помощи `prototype`, если хочется, чтобы он работал в IE8-.
205205

10-regular-expressions-javascript/13-regexp-infinite-backtracking-problem/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ alert( '12345678901234567890123456789123456789z'.match(/(\d+?)*$/) );
241241

242242
То есть, они даже проще, чем "жадные" -- берут максимальное количество символов и всё. Поиск продолжается дальше. При несовпадении никакого возврата не происходит.
243243

244-
Это, с стороны уменьшает количество возможных результатов, но с другой стороны -- в ряде случаев очевидно, что возврат (уменьшение количество повторений квантификатора) результата не даст. А только потратит время, что как раз и доставляет проблемы. Как раз такие ситуации и описаны выше.
244+
Это, с одной стороны, уменьшает количество возможных результатов, но, с другой стороны, в ряде случаев очевидно, что возврат (уменьшение количество повторений квантификатора) результата не даст. А только потратит время, что как раз и доставляет проблемы. Как раз такие ситуации и описаны выше.
245245

246246
Есть и другое средство -- "атомарные скобочные группы", которые запрещают перебор внутри скобок, по сути позволяя добиваться того же, что и сверхжадные квантификаторы,
247247

2-ui/1-document/12-multi-insert/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
ul.innerHTML += "<li>1</li><li>2</li>...";
6868
```
6969

70-
Но операцию `ul.innerHTML += "..."` можно по-другому переписать как `ul.innerHTML = ul.innerHTML + "..."`. Иначе говоря, она *не прибавляет, а заменяет* всё содержимое списка на дополненную строку. Это и нехорошо с точки зрения производительности, но и будут побочные эффекты. В частности, все внешние ресурсы (картинки) внутри перезаписываемого `innerHTML` будут загружены заново. Если в каких-то переменных были ссылки на элементы списка -- они станут неверны, так как содержимое полностью заменяется.В общем, так лучше не делать.
70+
Но операцию `ul.innerHTML += "..."` можно по-другому переписать как `ul.innerHTML = ul.innerHTML + "..."`. Иначе говоря, она *не прибавляет, а заменяет* всё содержимое списка на дополненную строку. Это и нехорошо с точки зрения производительности, но и будут побочные эффекты. В частности, все внешние ресурсы (картинки) внутри перезаписываемого `innerHTML` будут загружены заново. Если в каких-то переменных были ссылки на элементы списка -- они станут неверны, так как содержимое полностью заменяется. В общем, так лучше не делать.
7171

7272
А если нужно вставить в середину списка? Здесь `innerHTML` вообще не поможет.
7373

2-ui/2-events-and-interfaces/1-introduction-browser-events/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ button.onclick = function() {
200200

201201
**Используйте именно функции, а не строки.**
202202

203-
Назначение обработчика строкой `elem.onclick = "alert(1)"` можно иногда увидеть в древнем коде. Это будет работать, но не рекомендуется, могут быть проблемы при сжатии JavaScript Да и вообще, передавать код в виде строки по меньшей мере странно в языке, который поддерживает Function Expressions. Это возможно лишь по соображениям совместимости, не делайте так.
203+
Назначение обработчика строкой `elem.onclick = "alert(1)"` можно иногда увидеть в древнем коде. Это будет работать, но не рекомендуется, могут быть проблемы при сжатии JavaScript. Да и вообще, передавать код в виде строки по меньшей мере странно в языке, который поддерживает Function Expressions. Это возможно лишь по соображениям совместимости, не делайте так.
204204

205205
**Не используйте `setAttribute`.**
206206

2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
4545
При быстром движении с элемента `#FROM` до элемента `#TO`, как изображено на картинке выше -- промежуточные `<DIV>` будут пропущены. Сработает только событие `mouseout` на `#FROM` и `mouseover` на `#TO`.
4646
47-
На практике это полезно, потому что таких промежуточных элементов может быть много, и если обрабатывать заход и уход с каждого -- дополнительные вычислительные затраты.
47+
На практике это полезно, потому что таких промежуточных элементов может быть много, и если обрабатывать заход и уход с каждого, будут дополнительные вычислительные затраты.
4848
4949
С другой стороны, мы должны это понимать и не рассчитывать на то, что мышь аккуратно пройдёт с одного элемента на другой и так далее. Нет, она "прыгает".
5050

0 commit comments

Comments
 (0)