Методы JavaScript объектов, "this"

В JavaScript, объекты создаются для представления реальных сущностей, таких как заказы, пользователи и т.д. Например:

Javascript objects
let site = { name: "W3Docs", }; console.log(site);

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

В JavaScript вы можете представить действия функциями в свойствах.

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

Первым шагом при изучении методов объектов JavaScript должно быть изучение того, как “сказать привет”. Пример будет выглядеть так:

Javascript object methods
let site = { name: "W3Docs", }; site.welcome = function () { console.log("Welcome to W3Docs!"); }; site.welcome(); // Welcome to W3Docs!
Здесь используется выражение функции для создания конкретной функции и присвоения ее свойству site.welcome объекта.

Таким образом, сайт может отвечать только после его вызова.

Конкретная функция, которая является свойством объекта, называется методом. В данном примере, welcome - это метод объекта site.

Более того, предварительно объявленная функция может быть использована как метод. Для этого нужно вызвать следующую команду:

Javascript object methods
let site = { name: "W3Docs", }; site.welcome = function () { console.log("Welcome to W3Docs!"); }; site.welcome(); // Welcome to W3Docs!

Описание объектно-ориентированного программирования

Объектно-ориентированное программирование (в сокращении ООП) направлено на написание кодов с использованием объектов для представления сущностей.

ООП можно описать как отдельную науку. Было проведено множество исследований, чтобы полностью изучить, как выбирать подходящие сущности, как организовать связь между ними и многое другое. Это совершенно новая архитектура.

Краткая форма метода

Вы можете использовать краткий синтаксис для методов в объекте, как в этом случае:

Javascript objects methods
// method shorthand let site = { welcome() { console.log("Welcome to W3Docs"); } }; site.welcome();

В этом примере, вы можете видеть, что слово “function” было опущено, и вместо этого написано просто welcome. Конечно, могут быть отличия, связанные с наследованием объектов. Тем не менее, в большинстве случаев предпочтительно использовать более короткий синтаксис.

“this” в методах объектов

Обычно для выполнения своей работы метод объекта должен обладать информацией, хранящейся в объекте.

Например, код, который находится внутри site.welcome(), может потребоваться site.name.

Метод может использовать ключевое слово "this" для доступа к объекту.

Объект "перед точкой" должен быть значением "this".

Например, вы можете вызвать метод следующим образом:

Javascript objects call the method
let site = { name: "W3Docs", welcome() { // "this" is the "current object" console.log(this.name); } }; site.welcome(); // W3Docs

В приведенном выше примере, при выполнении site.welcome(), site будет значением "this".

У вас есть возможность получить доступ к объекту без использования "this". Просто обратитесь к нему через внешнюю переменную, как это показано здесь:

Javascript "this"
let site = { name: "W3Docs", welcome() { console.log(site.name); // "site" instead of "this" } }; site.welcome();

Однако, примите во внимание, что такие коды могут быть ненадежными. В случае копирования site в другую переменную (например, anotherSite = site) перезапись site чем-то другим, вы будете направлены к неправильному объекту.

Вот пример:

Javascript overwrite object with another thing
let site = { name: "W3Docs", welcome() { console.log(site.name); // leads to an error } }; let anotherSite = site; site = null; // overwrite to make things obvious anotherSite.welcome(); // Whoops! inside welcome(), the old name is used! error!

"this" может быть не привязанным

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

В следующем примере нет синтаксических ошибок:

function welcome() {
  console.log(this.name);
}

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

Javascript distinctive "this"
let site = { name: "W3Docs" }; let anotherSite = { name: "anotherSite" }; function welcome() { console.log(this.name); } // use the same function in two objects site.func = welcome; anotherSite.func = welcome; // these calls have different this // "this" inside the function is the object "before the dot" site.func(); // W3Docs (this == site) anotherSite.func(); // anotherSite (this == anotherSite) anotherSite['func'](); // anotherSite (dot or square brackets access the method – doesn't matter)

Таким образом, здесь используются простые шаги: Если вы сначала вызвали obj.func(), то вам нужно запустить this является obj во время вызова func. Это означает, что в данном примере используется либо site, либо anotherSite.

Вызов без объекта: this == undefined

Функцию даже можно вызвать без объекта, как это показано ниже:

Javascript "this"
function welcome() { console.log(this); } welcome();

В приведенном выше примере, this является undefined в строгом режиме. При попытке ввести this.name может появиться ошибка.

Значение "this" в нестрогом режиме будет глобальным объектом.

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

Последствия не привязанного "this"

Если вы уже знакомы с другим языком программирования, возможно, вы знакомы с идеей "привязанного this", в которой методы, описанные в объекте, всегда получают "this", ссылающийся на объект.

"this" в JavaScript можно описать как свободный. Следовательно, его значение не зависит от того, где был подтвержден метод. Но это больше зависит от объекта "перед точкой".

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

Стрелочные функции не имеют "this"

Стрелочные функции уникальны, так как они не имеют своего собственного "this". В случае, если вы начнете обращаться к нему из такой функции, он будет взят из внешней "нормальной" функции.

В следующем примере, arrow() использует это из метода: site.welcome().

Javascript "this" in arrow functions
let site = { name: "W3Docs", welcome() { let arrow = () => console.log(this.name); arrow(); } }; site.welcome(); // W3Docs

Специальный метод стрелочной функции особенно полезен, когда вы не хотите иметь отдельный "this", но хотите взять его из контекста за пределами.

Время Викторины: Проверьте Свои Навыки!

отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.

Считаете ли это полезным?