renovations
This commit is contained in:
parent
c7d4c7e3ff
commit
e1948130f6
170 changed files with 1496 additions and 1161 deletions
|
@ -0,0 +1,8 @@
|
|||
|
||||
Страшновато выглядит, да? Работает так (по строкам):
|
||||
<ol>
|
||||
<li>Вызов `bind` сохраняет дополнительные аргументы `args` (они идут со 2го номера) в массив `bindArgs`.</li>
|
||||
<li>... и возвращает обертку `wrapper`.</li>
|
||||
<li>Эта обёртка делает из `arguments` массив `args` и затем, используя метод [concat](http://javascript.ru/Array/concat), прибавляет их к аргументам `bindArgs` (карринг).</li>
|
||||
<li>Затем передаёт вызов `func` с контекстом и общим массивом аргументов.</li>
|
||||
</ol>
|
22
1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md
Normal file
22
1-js/6-objects-more/7-bind/1-cross-browser-bind/task.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Кросс-браузерная эмуляция bind
|
||||
|
||||
[importance 3]
|
||||
|
||||
Если вы вдруг захотите копнуть поглубже -- аналог `bind` для IE8- и старых версий других браузеров будет выглядеть следующим образом:
|
||||
|
||||
```js
|
||||
function bind(func, context /*, args*/) {
|
||||
var bindArgs = [].slice.call(arguments, 2); // (1)
|
||||
function wrapper() { // (2)
|
||||
var args = [].slice.call(arguments);
|
||||
var unshiftArgs = bindArgs.concat(args); // (3)
|
||||
return func.apply(context, unshiftArgs); // (4)
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
```
|
||||
|
||||
Использование -- вместо `mul.bind(null, 2)` вызывать `bind(mul, null, 2)`.
|
||||
|
||||
Не факт, что он вам понадобится, но в качестве упражнение попробуйте разобраться, как это работает.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue