Skip to content

Commit 4043958

Browse files
committed
functions.constructors
1 parent 97edd93 commit 4043958

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

doc/ru/function/constructors.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
## Конструктор
22

3-
Создание конструкторов в JavaScript также отличается от большинства других языков. Любая функция, вызванная с использованием ключевого слова `new`, будет конструктором.
3+
Конструкторы в JavaScript тоже действуют отличным от большинства других языков образом. Любая функция, вызванная с использованием ключевого слова `new`, станет конструктором.
44

5-
Внутри конструктора (вызываемой функции) `this` будет указывать на новосозданный `Object`. [Прототипом](#object.prototype) этого **нового** объекта будет `prototype` функции, которая была вызвана в качестве коструктора.
5+
Внутри конструктора (вызываемой функции) `this` будет указывать на новосозданный `Object`. [Прототипом](#object.prototype) этого **нового** экземпляра будет `prototype` функции, которая была вызвана под видом конструктора.
66

7-
Если вызываемая функция не имеет явного возврата посредством `return`, то вернётся `this`этот новый объект.
7+
Если вызываемая функция не возвращает явного значения посредством `return`, то она автоматически вернёт `this`тот самый новый экземпляр.
88

99
function Foo() {
1010
this.bla = 1;
@@ -18,7 +18,7 @@
1818

1919
В этом примере `Foo` вызывается в виде конструктора, следовательно прототип созданного объекта будет привязан к `Foo.prototype`.
2020

21-
В случае, когда функция в явном виде возвращает некое значение используя `return`, то в результате выполнения конструктора мы получим именно его, **но только** если возвращаемое значение представляет собой `Object`.
21+
В случае, когда функция в явном виде возвращает некое значение используя `return`, в результате выполнения конструктора мы получим именно его, **но только** если возвращаемое значение представляет собой `Object`.
2222

2323
function Bar() {
2424
return 2;
@@ -37,15 +37,15 @@
3737
Если же опустить ключевое слово `new`, то функция **не** будет возвращать никаких объектов.
3838

3939
function Foo() {
40-
this.bla = 1; // устанавливается глобальному объекту
40+
this.bla = 1; // свойство bla устанавливается глобальному объекту
4141
}
42-
Foo(); // undefined
42+
Foo(); // возвращает undefined
4343

44-
Этот пример в некоторых случаях всё-таки может сработать: это связано с поведением [`this`](#function.this) в JavaScript — он будет восприниматься парсером как *глобальный объект*.
44+
Хотя этот пример и будет работать — в связи с поведением [`this`](#function.this) в JavaScript, значение будет присвоено *глобальному объекту* — навряд ли это предполагалось автором.
4545

4646
### Фабрики
4747

48-
Если хотите избавится от необходимости использования `new`, напишите конструктор, возвращающий значение посредством `return`.
48+
Если вы хотите предоставить возможность опускать оператор `new` при создании объектов, возвращайте из соответствующего конструктора явное значение посредством `return`.
4949

5050
function Bar() {
5151
var value = 1;
@@ -62,17 +62,17 @@
6262
new Bar();
6363
Bar();
6464

65-
В обоих случаях при вызове `Bar` мы получим один и тот же результат — новый объект со свойством `method` (спасибо [замыканию](#function.closures) за это).
65+
В обоих случаях при вызове `Bar` мы получим один и тот же результат — новый объект со свойством `method`, являющимся [замыканием](#function.closures)).
6666

67-
Также следует заметить, что вызов `new Bar()` никак **не** связан с прототипом возвращаемого объекта. Хоть прототип и назначается всем новосозданным объектам, но `Bar` никогда не возвращает этот новый объект.
67+
Ещё следует заметить, что вызов `new Bar()` никак **не** воздействует на прототип возвращаемого объекта. Хоть прототип и назначается всем новосозданным объектам, `Bar` никогда не возвращает этот новый объект (''прим. перев.'' — судя по всему, подразумевается, что код `Bar` не может влиять на прототип созданного объекта, и под словами «новый объект» в последнем случае кроется прототип нового объекта, а не сам новый объект).
6868

69-
В предыдущем примере нет функциональных отличий между вызовом конструктора с оператором `new` или без него.
69+
В предыдущем примере нет никаких функциональных различий между вызовом конструктора с оператором `new` и вызовом без него.
7070

7171
### Создание объектов с использованием фабрик
7272

73-
Часто рекомендуют **не** использовать `new`, поскольку если вы его забудете, это может привести к ошибкам.
73+
Нередко встречаются советы **не** использовать оператор `new`, поскольку если вы его забудете, это может привести к ошибкам.
7474

75-
Чтобы создать новый объект, лучше использовать фабрику и создать новый объект *внутри* этой фабрики.
75+
Чтобы создать новый объект, нам предлагают использовать фабрику и создать новый объект *внутри* этой фабрики.
7676

7777
function Foo() {
7878
var obj = {};
@@ -89,13 +89,13 @@
8989
return obj;
9090
}
9191

92-
Хотя данный пример и сработает, если вы забыли ключевое слово `new` и благодаря ему легче работать с [приватными переменными](#function.closures), у него есть несколько недостатков
92+
Хотя данный пример и сработает, если вы забыли ключевое слово `new` и, возможно, благодаря ему вам станет легче работать с [приватными переменными](#function.closures), у него есть несколько недостатков:
9393

9494
1. Он использует больше памяти, поскольку созданные объекты **не** хранят методы в прототипе и соответственно для каждого нового объекта создаётся копия каждого метода.
9595
2. Чтобы эмулировать наследование, фабрике нужно скопировать все методы из другого объекта или установить прототипом нового объекта старый.
96-
3. Разрыв цепочки прототипов просто по причине забытого ключевого слова `new` идёт в разрез с духом языка.
96+
3. Разрыв цепочки прототипов по мнимой необходимости избавиться от использования ключевого слова `new` идёт вразрез с духом языка.
9797

9898
### Заключение
9999

100-
Хотя забытое ключевое слово `new` и может привести к багам, это точно **не** причина отказываться от использования прототипов. В конце концов, полезнее решить какой из способов лучше совпадает с требованиями приложения: очень важно выбрать один из стилей создания объектов и после этого **не изменять** ему.
100+
Хотя забытое ключевое слово `new` и может привести к багам, это точно **не** причина отказываться от использования прототипов. В конце концов, полезнее решить какой из способов лучше совпадает с требованиями приложения: крайне важно выбрать один из стилей создания объектов и после этого **не изменять** ему.
101101

0 commit comments

Comments
 (0)