renovations

This commit is contained in:
Ilya Kantor 2015-01-14 10:23:45 +03:00
parent c7d4c7e3ff
commit e1948130f6
170 changed files with 1496 additions and 1161 deletions

View file

@ -37,7 +37,9 @@ log(a,b,c); // вызовется вторая функция
Это называется "полиморфизмом функций" или "перегрузкой функций". В JavaScript ничего подобного нет.
**Может быть только одна функция с именем `log`, которая вызывается с любыми аргументами.** А уже внутри она может посмотреть, с чем вызвана и по-разному отработать.
**Может быть только одна функция с именем `log`, которая вызывается с любыми аргументами.**
А уже внутри она может посмотреть, с чем вызвана и по-разному отработать.
В примере выше второе объявление `log` просто переопределит первое.
[/smart]
@ -142,9 +144,7 @@ for(var i=0; i<arguments.length; i++) {
Такие объекты иногда называют *"коллекциями"* или *"псевдомассивами"*.
## Примеры работы с аргументами
### Копирование объектов copy(dst, src1, src2...) [#copy]
## Пример: копирование свойств copy(dst, src1, src2...) [#copy]
Иногда встаёт задача -- скопировать в существующий объект свойства из одного или нескольких других.
@ -206,12 +206,14 @@ var userClone = copy({}, user);
//+ autorun
function copy() {
var dst = arguments[0];
for (var i=1; i<arguments.length; i++) {
var arg = arguments[i];
for (var key in arg) {
dst[key] = arg[key];
}
}
return dst;
}
```
@ -229,6 +231,7 @@ function copy(dst) {
dst[key] = arg[key];
}
}
return dst;
}
```
@ -333,14 +336,17 @@ showWarning(opts); // вызвать с новым текстом, без коп
## Устаревшее свойство arguments.callee [#arguments-callee]
В старом стандарте JavaScript объект `arguments` не только хранил список аргументов, но и содержал в свойстве `arguments.callee` ссылку на функцию, которая выполняется в данный момент.
[warn header="Используйте NFE вместо `arguments.callee`"]
Это свойство устарело, при `use strict` оно не работает, но ещё встречается в старом коде, поэтому о нём желательно знать.
Это свойство устарело, при `use strict` оно не работает.
Единственная причина, по которой оно тут -- это то, что его можно встретить в старом коде, поэтому о нём желательно знать.
Современная спецификация рекомендует использовать ["именованные функциональные выражения (NFE)"](#functions-nfe).
[/warn]
В старом стандарте JavaScript объект `arguments` не только хранил список аргументов, но и содержал в свойстве `arguments.callee` ссылку на функцию, которая выполняется в данный момент.
Например:
```js
@ -366,7 +372,7 @@ var factorial = function(n) {
};
```
В учебнике мы его использовать не будем, оно приведено для общего ознакомления, так как пока ещё много старого кода использует его.
В учебнике мы его использовать не будем, оно приведено для общего ознакомления.
### arguments.callee.caller
@ -375,7 +381,7 @@ var factorial = function(n) {
[warn header="Это свойство тоже устарело"]
Это свойство было в старом стандарте, при `use strict` оно не работает, как и `arguments.callee`.
Также ранее существовало похожее свойство `arguments.caller` (без `callee`). Но это уже вообще раритет, оно даже не кросс-браузерное. А вот свойство `arguments.callee.caller` поддерживается везде, если не использован `use strict`, поэтому в старом коде оно встречается.
Также ранее существовало более короткое свойство `arguments.caller`. Но это уже раритет, оно даже не кросс-браузерное. А вот свойство `arguments.callee.caller` поддерживается везде, если не использован `use strict`, поэтому в старом коде оно встречается.
[/warn]
Пример работы: