Skip to content

Commit bc8be79

Browse files
committed
fixes iliakan#32 and other
1 parent 9937257 commit bc8be79

4 files changed

Lines changed: 33 additions & 10 deletions

File tree

1-js/2-first-steps/14-types-conversion/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ alert( +false ); // 0
8989
alert( "\n0 " == 0 ); // true
9090
```
9191

92-
При этом строка `"\n"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается пустая строка `""`, которая равна `0`.</li>
92+
При этом строка `"\n0"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается строка `"0"`, которая равна `0`.</li>
9393
</li>
9494
<li>С логическими значениями:
9595

1-js/6-objects-more/3-constructor-new/article.md

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Обычный синтаксис `{...}` позволяет создать один объект. Но зачастую нужно создать много однотипных объектов.
44

55
Для этого используют "функции-конструкторы", запуская их при помощи специального оператора `new`.
6+
67
[cut]
78
## Конструктор
89

@@ -21,12 +22,14 @@ var animal = new Animal("ёжик");
2122
*/!*
2223
```
2324

24-
Технически, любую функцию можно вызвать при помощи `new`. Но при этом она работает несколько иным образом, чем обычно, поэтому функции, предназначенные к вызову через `new`, называют с большой буквы.
25+
Заметим, что, технически, любая функция может быть использована как конструктор. То есть, любую функцию можно вызвать при помощи `new`. Как-то особым образом указывать, что она -- конструктор -- не надо.
26+
27+
Но, чтобы выделить функции, задуманные как конструкторы, их называют с большой буквы: `Animal`, а не `animal`.
2528

26-
**Алгоритм работы функции, запущенной через `new`:**
29+
Детальнее -- функция, запущенная через `new`, делает следующее:
2730

2831
<ol>
29-
<li>Автоматически создается новый пустой объект.</li>
32+
<li>Создаётся новый пустой объект.</li>
3033
<li>Ключевое слово `this` получает ссылку на этот объект.</li>
3134
<li>Функция выполняется. Как правило, она модифицирует `this`, добавляет методы, свойства.</li>
3235
<li>Возвращается `this`.</li>
@@ -47,19 +50,39 @@ animal = {
4750
```js
4851
function Animal(name) {
4952
*!*
50-
// this = {}
53+
// this = {};
5154
*/!*
5255

5356
// в this пишем свойства, методы
5457
this.name = name;
5558
this.canWalk = true;
5659

5760
*!*
58-
// return this
61+
// return this;
5962
*/!*
6063
}
6164
```
6265

66+
Теперь многократными вызовами `new Animal` с разными параметрами мы можем создать столько объектов, сколько нужно. Поэтому такую функцию и называют *конструктором* -- она предназначена для "конструирования" объектов.
67+
68+
[smart header="new function() { ... }"]
69+
Иногда функцию-конструктор объявляют и тут же используют, вот так:
70+
```js
71+
var animal = new function() {
72+
this.name = "Васька";
73+
this.canWalk = true;
74+
};
75+
```
76+
Так делают, когда хотят создать единственный объект данного типа. Примере выше с тем же успехом можно было бы переписать как:
77+
```js
78+
var animal = {
79+
name: "Васька",
80+
canWalk: true
81+
}
82+
```
83+
...Но обычный синтаксис `{...}` не подходит, когда при создании свойств объекта нужны более сложные вычисления. Их можно проделать в функции-конструкторе и записать результат в `this`.
84+
[/smart]
85+
6386
## Правила обработки return
6487

6588
Как правило, конструкторы ничего не возвращают. Их задача -- записать всё, что нужно, в `this`, который автоматически станет результатом.
@@ -176,6 +199,8 @@ vasya.sayHi(); // Привет, Вася Петров
176199

177200
Те функции и данные, которые должны быть доступны для внешнего кода, мы пишем в `this` -- и к ним можно будет обращаться, как например `vasya.sayHi()`, а вспомогательные, которые нужны только внутри самого объекта, сохраняем в локальной области видимости.
178201

202+
[]
203+
179204
## Итого
180205

181206
Объекты могут быть созданы при помощи функций-конструкторов:

2-ui/1-document/11-modifying-document/article.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,7 @@ parentElem.appendChild(elem)
213213

214214
Конечно, можно сделать функцию для генерации сообщений и поместить туда этот код, но в ряде случаев гораздо эффективнее -- *клонировать* существующий `div`, а потом изменить текст внутри. В частности, если элемент большой, то клонировать его будет гораздо быстрее, чем пересоздавать.
215215

216-
Вызов `elem.cloneNode(true)` создаст "глубокую" копию элемента -- вместе с атрибутами, включая подэлементы. Если же вызвать с аргумнтом `false`, то он копия будет без подэлементов, но это нужно гораздо реже.
217-
218-
### Копия сообщения
216+
Вызов `elem.cloneNode(true)` создаст "глубокую" копию элемента -- вместе с атрибутами, включая подэлементы. Если же вызвать с аргументом `false`, то копия будет сделана без дочерних элементов. Это нужно гораздо реже.
219217

220218
Пример со вставкой копии сообщения:
221219

2-ui/2-events-and-interfaces/5-event-delegation/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
var selectedTd;
4343

4444
*!*
45-
table.onclick = function(event) {
45+
table.onclick = function(event) {
4646
var target = event.target; // где был клик?
4747

4848
if (target.tagName != 'TD') return; // не на TD? тогда не интересует

0 commit comments

Comments
 (0)