Javascript вызов метода по имени

Вызов функций JavaScript

Код внутри функции JavaScript не выполняется, когда эта функция определяется. Он выполняться только тогда, когда эта функция будет «запущена».

Обычно говорят «вызвать функцию» или «выполнить функцию».

Запуск функции как функции

Функция в предыдущем примере не принадлежит какому-либо объекту. Однако в JavaScript всегда существует «дефолтный» глобальный объект.

В HTML таким глобальным объектом является HTML страница, таким образом, функция из предыдущего примера «принадлежит» текущей HTML странице.

В браузере объект страницы — это окно браузера или объект window. Так, функция из примера автоматически становится функцией объекта window. Таким образом, myFunction() и window.myFunction() это одна и та же функция:

Это обычный способ вызывать функции JavaScript. Однако, это не очень хорошая практика. Глобальные переменные, методы или функции могут создавать конфликты имен и приводить к сбоям в глобальном объекте.

Ключевое слово this

В JavaScript ключевое слово this — это объект, который «владеет» текущим кодом.

При использовании в функции значением ключевого слова this является объект, который «владеет» данной функцией.

Обратите внимание, что this — это не переменная, а ключевое слово. Вы не можете изменять его значение.

Глобальный объект

Когда функция вызывается без объекта-владельца, значением ключевого слова this становится глобальный объект.

В браузере глобальный объект — это окно браузера (объект window).

В следующем примере функция возвращает объект window:

Внимание! Вызов функции как глобальной, устанавливает this на глобальный объект. Использование объекта window в качестве переменной может привести к краху вашей программы.

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

В JavaScript вы можете определять функции как методы объектов.

В следующем примере создается объект (myObject) с двумя свойствами (firstName и lastName) и одним методом (fullName):

Метод fullName — функция. Эта функция принадлежит объекту. Объект myObject — владелец функции fullName.

Ключевое слово this указывает на объект, который «владеет» данным кодом JavaScript. В данном случае значением ключевого слова this является объект myObject:

Вызов функции как метод объекта устанавливает в качестве значения ключевого слова this сам объект.

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

Если перед вызовом функции стоит ключевое слово new, то это вызывается конструктор объекта.

Выглядит так, будто вы создаете новую функцию, но так как функции в JavaScript являются объектами, вы на самом деле создаете новый объект:

Вызов конструктора создает новый объект. Новый объект наследует свойства и методы своего конструктора.

У ключевого слова this в конструкторе нет значения. Значением ключевого слова this станет новый объект, созданный при вызове функции конструктора.

Читайте также:  Имена для цветных кошек

Источник

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

Код внутри JavaScript function будет выполняться, когда «что-то» вызывает ее.

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

Код внутри функции не выполняется, когда функция определена.

Код внутри функции выполняется при вызове функции.

Обычно используется термин «вызвать функцию» вместо «вызов функции«.

Также часто говорят «вызов функции», «запуск функции» или «выполнение функции».

В этом уроке мы будем использовать вызвать, потому что функция JavaScript может быть вызвана без вызова.

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

Пример

Функция выше не принадлежит ни одному объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.

В HTML глобальным объектом по умолчанию является сама HTML страница, поэтому функция выше «принадлежит» HTML странице.

В браузере объектом страницы является окно браузера. Функция выше автоматически становится функцией окна.

myFunction() и window.myFunction() это та же функция:

Пример

Это распространенный способ вызова функции JavaScript, но не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибки в глобальном объекте.

Ключевое слово this

В JavaScript this называется объектом, который «владеет» текущим кодом.

Совет: Подробнее об this ключевом слове в JS Ключевое слово this.

Глобальный объект

Когда функция вызывается без объекта владельца, значение this объекта становится глобальным объектом.

В веб-браузере глобальным объектом является окно браузера.

Этот пример возвращает объект window В качестве значения this :

Пример

var x = myFunction(); // x будет объектом window

function myFunction() <
return this;
>

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

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

В JavaScript можно определить функции как методы объектов.

В следующем примере создается объект (myObject) с двумя свойствами (firstName и lastName) и метод (fullName):

Пример

Проверьте! Измените метод fullName, чтобы вернуть значение this :

Пример

Вызов функции как метода объекта приводит к тому, что значением метода this является сам объект.

Вызов функции с помощью конструктора функций

Похоже, что вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы фактически создаете новый объект:

Пример

// Это конструктор функций:
function myFunction(arg1, arg2) <
this.firstName = arg1;
this.lastName = arg2;
>

// This создает новый объект
var x = new myFunction(«Андрей», «Щипунов»);
x.firstName; // Будет возвращать «Андрей»

Вызов конструктора создает новый объект. Новый объект наследует свойства и методы от своего конструктора.

Читайте также:  Сафарали имя какой национальности

Ключевое слово this в конструкторе не имеет значения.
Значением параметра this будет новый объект, созданный при вызове функции.

Источник

Методы объекта, «this»

Объекты обычно создаются, чтобы представлять сущности реального мира, будь то пользователи, заказы и так далее:

И так же, как и в реальном мире, пользователь может совершать действия: выбирать что-то из корзины покупок, авторизовываться, выходить из системы, оплачивать и т.п.

Такие действия в JavaScript представлены свойствами-функциями объекта.

Примеры методов

Для начала давайте научим нашего пользователя user здороваться:

Здесь мы просто использовали Function Expression (функциональное выражение), чтобы создать функцию для приветствия, и присвоили её свойству user.sayHi нашего объекта.

Затем мы вызвали её. Теперь пользователь может говорить!

Функцию, которая является свойством объекта, называют методом этого объекта.

Конечно, мы могли бы заранее объявить функцию и использовать её в качестве метода, примерно так:

Когда мы пишем наш код, используя объекты для представления сущностей реального мира, – это называется объектно-ориентированное программирование или сокращённо: «ООП».

ООП является большой предметной областью и интересной наукой само по себе. Как выбрать правильные сущности? Как организовать взаимодействие между ними? Это – создание архитектуры, и есть хорошие книги по этой теме, такие как «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» авторов Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес или «Объектно-ориентированный анализ и проектирование с примерами приложений» Гради Буча, а также ещё множество других книг.

Сокращённая запись метода

Существует более короткий синтаксис для методов в литерале объекта:

Нужно отметить, что эти две записи не полностью эквивалентны. Есть тонкие различия, связанные с наследованием объектов (что будет рассмотрено позже), но на данном этапе изучения это неважно. В большинстве случаев сокращённый синтаксис предпочтителен.

Ключевое слово «this» в методах

Как правило, методу объекта необходим доступ к информации, которая хранится в объекте, чтобы выполнить с ней какие-либо действия (в соответствии с назначением метода).

Значение this – это объект «перед точкой», который использовался для вызова метода.

Здесь во время выполнения кода user.sayHi() значением this будет являться user (ссылка на объект user ).

«this» не является фиксированным

В JavaScript ключевое слово «this» ведёт себя иначе, чем в большинстве других языков программирования. Оно может использоваться в любой функции.

В этом коде нет синтаксической ошибки:

Значение this вычисляется во время выполнения кода и зависит от контекста.

Например, здесь одна и та же функция назначена двум разным объектам и имеет различное значение «this» при вызовах:

Читайте также:  Напиши мое имя со своей фамилией

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

Если вы до этого изучали другие языки программирования, тогда вы, скорее всего, привыкли к идее «фиксированного this » – когда методы, определённые внутри объекта, всегда сохраняют в качестве значения this ссылку на свой объект (в котором был определён метод).

В JavaScript this является «свободным», его значение вычисляется в момент вызова метода и не зависит от того, где этот метод был объявлен, а зависит от того, какой объект вызывает метод (какой объект стоит «перед точкой»).

Эта идея вычисления this в момент исполнения имеет как свои плюсы, так и минусы. С одной стороны, функция может быть повторно использована в качестве метода у различных объектов (что повышает гибкость). С другой стороны, большая гибкость увеличивает вероятность ошибок.

Здесь мы не будем судить о том, является ли это решение в языке хорошим или плохим. Мы должны понимать, как с этим работать, чтобы получать выгоды и избегать проблем.

Внутренняя реализация: Ссылочный тип

Этот раздел объясняет сложную тему, чтобы лучше понимать некоторые запутанные случаи.

Если вы хотите продвигаться быстрее, его можно пропустить или отложить.

Вы можете видеть, что при вызове будет ошибка, потому что значением «this» внутри функции становится undefined (полагаем, что у нас строгий режим).

Так работает (доступ к методу объекта через точку):

Так уже не работает (вызываемый метод вычисляется):

Почему? Если мы хотим понять, почему так происходит, давайте разберёмся (заглянем под капот), как работает вызов методов ( obj.method() ).

Присмотревшись поближе, в выражении obj.method() можно заметить две операции:

Итак, каким же образом информация о this передаётся из первой части во вторую?

Этот ссылочный тип (Reference Type) является внутренним типом. Мы не можем явно использовать его, но он используется внутри языка.

Результатом доступа к свойству user.hi является не функция, а значение ссылочного типа. Для user.hi в строгом режиме оно будет таким:

Когда скобки () применяются к значению ссылочного типа (происходит вызов), то они получают полную информацию об объекте и его методе, и могут поставить правильный this ( =user в данном случае, по base ).

У стрелочных функций нет «this»

Например, здесь arrow() использует значение this из внешнего метода user.sayHi() :

Итого

Значение this определяется во время исполнения кода.

Источник

Оцените статью
Имя, Названия, Аббревиатуры, Сокращения
Adblock
detector