call вызывает функцию «перед точкой», а первый аргумент call устанавливается как значение this в вызываемой функции, а все остальные передаются как аргументы этой функции.
function test(color) {
this.style.backgroundColor = color;
}
test.call(document.body, 'red');
При выполнении, this внутри функции будет указывать на document.body
_____
apply делает то же самое, но параметры функции принимает в виде массива:
test.apply(document.body, ['red']);
_____
Это достаточно искусственный пример. Оба они используются в редких специфичных случаях, когда нужно указать контекст вызова (значение this внутри функции).
_____
А обычный вызов любой функции test(x, y, z); эквивалентен
test.call(undefined, x, y, z);
test.apply(undefined, [x, y, z]);
_____
caller — deprecated, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
JavaScript
Javascript Объясните, пожалуйста, методы apply, call и caller.
Nadir Haydarov
даже не знал про caller. О оказывается deprecated )
Call - вызов метода в контексте объекта если в самом объекте этого метода нет.
function getFullName(name = 'Alex ') {
console.log(name + this.subname)
}
const Name = {
subname : 'Smirnov'
}
getFullName.call(Name, 'Ivan')// В Name изначально нет метода getFullName, без call будет [object Object]undefined
>>>
Что до caller, то в документации он обозначен как не рекомендуемый метод, значит и рассматривать его не зачем
function getFullName(name = 'Alex ') {
console.log(name + this.subname)
}
const Name = {
subname : 'Smirnov'
}
getFullName.call(Name, 'Ivan')// В Name изначально нет метода getFullName, без call будет [object Object]undefined
>>>
Что до caller, то в документации он обозначен как не рекомендуемый метод, значит и рассматривать его не зачем
apply вызывает функцию в контексте объекта, переданного первым параметром, используя в качестве аргументов массив, заданный вторым параметром.
call делает то же самое, но принимает параметры не в виде массива, а линейно, т. е, если функцию нужно выполнить с 5 аргументами, то call придётся вызвать с шестью (контекст + 5 аргументов).
Т. е. functionname.apply(a, b) аналогичен functionname.call(a, ..b), если b это массив (мейл. ру точку лишнюю вырезал).
call делает то же самое, но принимает параметры не в виде массива, а линейно, т. е, если функцию нужно выполнить с 5 аргументами, то call придётся вызвать с шестью (контекст + 5 аргументов).
Т. е. functionname.apply(a, b) аналогичен functionname.call(a, ..b), если b это массив (мейл. ру точку лишнюю вырезал).
caller не знаю, не использую
Знаю только про apply и call
1 из них принимает объект, а дугой массив. Но по работе они практически одинаковы.
Это даже что то вроде конструктора, который ты вызываешь через new.
Знаю только про apply и call
1 из них принимает объект, а дугой массив. Но по работе они практически одинаковы.
Это даже что то вроде конструктора, который ты вызываешь через new.
применить вызвать и следить
Если вы не понимаете по-русски, задайте вопрос иначе или не ипите мозги. Могу помочь, но желание пропадает
Если вы не понимаете по-русски, задайте вопрос иначе или не ипите мозги. Могу помочь, но желание пропадает
Похожие вопросы
- Почему split не работает и правильно ли написана функция? javascript. Помогите, пожалуйста
- JavaScript. Помогите, пожалуйста понять, где здесь ошибка. Не ругайтесь, я нуб.
- Объясните пожалуйста как это работает на примере сайта
- Объясните мне, пожалуйста, что это за аргументы функции в javascript ( function(arg1, arg2, ..) ).
- Пожалуйста объясните человеческим языком где и как используется значение undefined и null в JavaScript ?
- У javascript есть аналог этих функций и методов, как в python?
- Javascript. local storage. Дайте ссылку, где почитать о нем или сами объясните.
- Есть ли аналоги JavaScript?
- С чего начать учить JavaScript?
- Подскажите книги для изучения javascript? Хочу начать изучать веб программирование javascript подойтет для начала?