function bind(f, context){
return function (){
return f.apply(context, arguments)
};
}
function f(a){
console.log(this);
console.log(a);
}
var a = bind(f, 'ada', 'fak');
console.log(a())
1) Функция bind()
получает аргументы f(функция)
и context
;
2) Внутри bind()
есть анонимная функция, где первый аргумент получает метод apply
и становится его context
, а 2 аргумент выводится в console.log();
правильно ?
bind
вызывается с тремя аргументами: f
, 'ada'
и 'fak'
. Переменная a
ждёт возвращаемый функцией результат.var a = bind(f, 'ada', 'fak');
f
(сюда после вызова попадает функция) и context
(сюда строка 'ada'
), третий аргумент (строка 'fak'
) упускается.function bind(f, context)
bind
сразу же возвращает другую анонимную функцию, которая в свою очередь возвращает результат вызова параметра f
. Однако вызов здесь не простой, а методом apply
, первый параметр которого в итоге станет контекстным объектом this
внутри вызываемой функции, а второй параметр - массив с аргументами для вызываемой функции. В данном случае вторым параметром передаётся псевдомассив arguments
, который по умолчанию есть в каждой НЕ стрелочной функции и содержит в себе, соответственно, все переданные в функцию аргументы в виде массива. В нашем случае он будет пуст, так как переменная a
, содержащая в себе эту анонимную функцию, в конце концов будет вызвана без аргументов (console.log(a())
)return function (){
return f.apply(context, arguments)
};
f
имеет 1 параметр a
, который в нашем случае будет undefined
, так как массив аргументов, при вызове через метод apply
, был пуст.function f(a)
console.log(this);
возвращает такой объект, так как в метод apply
первым аргументом мы передали строку 'ada'
, которая затем неявно преобразовалась в объект.function bind(fnToCall, objectThis, args){
return function (){
return fnToCall.apply(objectThis, args)
};
}
function f(a){
console.log(this);
console.log(a);
}
var a = bind(f, {
text: "Hello"
}, ["Another argument"]);
a()
В функцию bind
вы передаете функцию f
, которая вызвается так, что this
внутри функции f
равен objectThis
. Третьим аргументом является массив, который передает аргументы функции f
. Попробуйте использовать разные значение аргументов, которые вы передаете в функцию bind
, чтобы хорошо разобраться.
Я недавно наткнулся на данный код и не могу понять, как это работаетПодскажите, пожалуйста
Всем привет! Возник вопрос по поводу работы V8Вот предположим мы создали объект какой-то и для него создалась цепочка скрытых классов
Сегодня хотел бы обратится к тем, кто знает что делать со скриптом или формой, чтобы при использовании скрипта читалась не только первая формаВкратце:...