Разница между functionName () и functionName.call () в javascript

Надеюсь, заголовок не требует пояснений, в чем преимущество использования метода .call () в Javascript по сравнению с простым написанием functionName (); ?

Также есть functionName.apply (). См. Пункты 15.5.4.3 и 15.5.4.4 в ecma-international.org/publications/files/ECMA-ST/Ecma-262.p‌ df

some 21.01.2009 20:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
501
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы ничего не передадите в call(), он будет таким же; функция будет запущена с той же областью, что и вызов call():

function test() {
    alert(this);
}

test(); // alerts the window object
test.call(); // alerts the window object

Но если вы передадите объект в call(), этот объект будет использоваться в качестве области:

test.call("hi"); // alerts "hi"
Ответ принят как подходящий

functionName.call() принимает экземпляр объекта в качестве своего первого параметра. Затем он запускает functionName в контексте этого экземпляра объекта (т.е. "this" - это указанный экземпляр).

Приведу пример:

<html>
<head>
<script type = "text/javascript">
 var developerName = "window";
function test(){
   var developer = function(developerName ){ this.developerName  = developerName;}
    developer.prototype = {
      displayName : function(){alert(this.developerName );}
    }
    var developerA = new developer("developerA");
    var developerB = new developer("developerB");
    developerA.displayName();//will display an alert box with "developerA" as its inner text
    developerA.displayName.call();//will display an alert box with "window" as its inner text, in this case the context is the window object.
    developerA.displayName.call(developerB);//will display an alert box with "developerB" as its inner text
}
</script>
</head>
<body>
<input type = "button" onclick = "test()" value = "display names"/>
<body>
</html>

Дополнительная литература:
http://www.alistapart.com/articles/getoutbindingsituations

Надеюсь это поможет.

Другие вопросы по теме