Дисциплины - Проектирование динамических страниц

Основы JavaScript в Проектировании динамических страниц - Функции - Способы вызова функций

В javaScript существует 4 способа вызова функций.

  • Как функции

  • Как методы

  • Как конструкторы

  • С помощью методов call и apply

Вызов функции как функции

При вызове функции возвращаемое значение становится значением выражения вызова. Если функция имеет ключевое слово return, то возвращается значение выражения, следующее за инструкцией return. Если функция не имеет выражения return, то возвращается undefined.

Пример вызова функции:

myfunc(‘Вася’); // Привет Вася

Вызов функции как метода

Метод – это функция, которая хранится в виде свойства объекта.

Возвращаемые значения обрабатываются точно также, как и при вызове обычной функции. Однако есть одно важное отличие. Любая функция, используемая как метод, фактически получает неявный аргумент – объект, относительно которого она была вызвана. Тело функции получает возможность ссылаться на объект с помощью ключевого слова this.

Вызов функции как метода:

var calculator = {
  operand1:1,
  operand2:1,
  add: function(){
    this.result = this.operand1+this.operand2;
  }
}
  calculator.add();
  calculator.result; // вернет 2

Вызов функции как конструктора

Если вызову функции предшевствует ключевое слово new, то это вызов конструктора. При вызове функции как конструктора, пару круглых скопок можно опустить:

var o = new Function();
var o = new Function;

Также, как методы и простые функции, конструкторы определяются с помощью ключевого слова function:

function User(name, password){
  this.name = name;
  this.password = password
}

Вызов User с помощью оператора new создает из функции User конструктор.

var u = new User(‘Вася’, ‘123’);
u.name // Вася

Основная роль функции-конструктора заключается в иницилизации объекта.

Косвенный вызов функции

Методы call() и apply() позволяют выполнить косвенный вызов функции, как если бы она была методом другого объекта. Первым параметром ободим методам передается объект, относительно которого вызывается функция, этот аргумент определяет ключевое слово this в теле функции.

Чтобы вызвать функцию без аргументов, ка метод объекта o, можно использовать любой из методов: call() или apply().

call()

Метод call может применяться для вызова функции в контексте нужного объекта:

var Animal1 = {name: 'Cat'}
var Animal2 = {name: 'Dog'}

function sayName() {
    // this — ссылка на объект, в контексте которого вызвана функция
    alert(this.name);
}

sayName.call(Animal1) // выдаст сообщение "Cat"
sayName.call(Animal2) // выдаст сообщение "Dog"

apply()

Метод apply() действует точно также, как метод call(), за исключением того, что apply() аргументы для функции передает ввиде элементов массива.

Метод apply() получает массив аргументов и вызывает функцию, как будто каждый элемент массива является отдельным аргурментом вызова функции. Поэтому он полезен для вызова вариативных (с неизвестным количеством аргументов) функций с вычисляемым массивом аргументов.

Кроме массива аргументов, метод apply получает первый аргрумент, указывающий на вариант связывания this для вызываемой функции. Если функция не ссылается на this, ей можно передать null.

var obj = {}
var scor = [0,1,2]
average.apply(obj, score);
// это будет равносильно вызову: {obj.average(scor[0],scor[1],scor[2])

Т.е. функция average превратилась в метод объекта obj.

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
00421-00422 ИИТ БГУИР
00423 ИИТ БГУИР
10421-10422 ИИТ БГУИР
10423 БГУИР
20421 БГУИР
30421 БГУИР
30423 БГУИР


Изображения Видео

1. JavaScript. Функциональное программирование. Лекция 2. Преобразование данных <iframe width="560" height="315" src="https://www.youtube.com/embed/EBKzRg4aTro" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
2. JavaScript. Функциональное программирование. Лекция 2 (продолжение) <iframe width="560" height="315" src="https://www.youtube.com/embed/phyt4PFk6Pc" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
3. HTML5 http://erud.by/files/books/HTML5.docx
4. ООП в JavaScript http://erud.by/object_orient_program/586
5. Фоновое видео jQuery http://johnpolacek.github.io/BigVideo.js
Учебная программа