Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fix object methods (01-04-04)#696

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
Andrii256 wants to merge3 commits intojavascript-tutorial:master
base:master
Choose a base branch
Loading
fromAndrii256:01-04-04-object-methods
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,13 +17,13 @@ alert( user.ref.name ); // Error: Cannot read property 'name' of undefined

Це тому, що правила, які встановлюють `this`, не розглядають оголошення об’єкта. Важливий лише момент виклику метода.

Тут значення `this` всередині `makeUser()` є `undefined`, оскількивоно викликається як функція, а не як метод із синтаксисом "через крапку".
Тут значення `this` всередині `makeUser()` є `undefined`, оскількивона викликається як функція, а не як метод із синтаксисом "через крапку".

Значення `this` є одним для всієї функції, блоки коду та літерали об’єктів на це не впливають.

Отже, `ref: this` дійсно бере значення `this` функції.

Ми можемо переписати функцію і повернути те саме `this` зі значенням`undefined`:
Ми можемо переписати функцію і повернути те саме `this` зі значенням `undefined`:

```js run
function makeUser(){
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@ importance: 5

Створіть об'єкт `calculator` з трьома методами:

- `read()` запитує два значення та зберігає їх як властивості об’єкта з іменами `a` та `b` відповідно.
- `read()` запитує(з допомогою prompt)два значення та зберігає їх як властивості об’єкта з іменами `a` та `b` відповідно.
- `sum()` повертає суму збережених значень.
- `mul()` множить збережені значення і повертає результат.

Expand Down
18 changes: 9 additions & 9 deletions1-js/04-object-basics/04-object-methods/article.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,15 +32,15 @@ user.sayHi = function() {
user.sayHi(); // Привіт!
```

Тут ми щойновикористалиFunction Expression (функціональний вираз)для створення функціїта присвоїли їївластивості`user.sayHi` об’єкта.
Тут ми щойностворили функцію з допомогоюFunction Expression (функціональний вираз) та присвоїли їїу властивість об’єкта`user.sayHi`.

Потім ми викликали її завдяки `user.sayHi()`. Користувач тепер може говорити!

Функція, яка є властивістю об’єкта, називається його *методом*.

Отже, ми отримали метод `sayHi` об’єкта `user`.

Звичайно, ми могли б використовувати попередньо оголошену функцію як метод, наприклад:
Звісно ж, ми могли б використовувати і попередньо оголошену функцію як метод, наприклад:

```js run
let user = {
Expand DownExpand Up@@ -111,7 +111,7 @@ let user = {

sayHi() {
*!*
// "this" -- це "поточний об’єкт"
// "this" - це "поточний об’єкт"
alert(this.name);
*/!*
}
Expand DownExpand Up@@ -181,7 +181,7 @@ function sayHi() {

Значення `this` обчислюється під час виконання і залежить від контексту.

Наприклад, тут одна й та ж функціяпризначена двом різним об’єктам і має різний "this" при викликах:
Наприклад, тут одна й та ж функціяприсвоєна двом різним об’єктам і має різний "this" при викликах:

```js run
let user = { name: "Іван" };
Expand All@@ -202,7 +202,7 @@ admin.f = sayHi;
user.f(); // Іван (this == user)
admin.f(); // Адмін (this == admin)

admin['f'](); // Адмін (неважливо те, як звертатися до методу об’єкта -- через крапку чи квадратні дужки)
admin['f'](); // Адмін (неважливо те, як звертатися до методу об’єкта - через крапку чи квадратні дужки)
```

Правило просте: якщо `obj.f()` викликано, то `this` це `obj` під час виконання `f`. Так що в даному прикладі це `user` або `admin`.
Expand All@@ -220,15 +220,15 @@ sayHi(); // undefined

В такому випадку `this` є `undefined` в суворому режимі (`"use strict"`). Якщо ми спробуємо звернутися до `this.name` трапиться помилка.

У несуворому режимі значенням `this` в такому випадку буде *глобальний об’єкт* (`window` у браузері, ми дійдемо до нього пізніше в главі [](info:global-object)). Це--поведінка, яка склалася історично та виправляється завдяки використанню суворого режиму (`"use strict"`).
У несуворому режимі значенням `this` в такому випадку буде *глобальний об’єкт* (`window` у браузері, ми дійдемо до нього пізніше в главі [](info:global-object)). Це поведінка, яка склалася історично та виправляється завдяки використанню суворого режиму (`"use strict"`).

Зазвичай такий виклик є помилкою програмування. Якщо всередині функції є `this`, вона очікує виклику в контексті об’єкта.
````

```smart header="Наслідкивільного `this`"
```smart header="Наслідкинеприв'язаного (англ. unbound) `this`"
Якщо ви прийшли з іншої мови програмування, то ви, мабуть, звикли до ідеї "зв’язаного `this`", де методи, визначені в об’єкті, завжди мають `this`, що посилається на цей об’єкт.

В JavaScript `this` є "вільним", його значення обчислюється під час виклику інезалежить від того, де метод був оголошений, а від того, який об’єкт "перед крапкою".
В JavaScript `this` є "вільним", його значення обчислюється під час виклику і залежить не від того, де метод був оголошений, а від того, який об’єкт "перед крапкою".

Поняття `this`, що визначається в процесі роботи має як плюси, так і мінуси. З одного боку, функцію можна використовувати повторно для різних об’єктів. З іншого боку, більша гнучкість створює більше можливостей для помилок.

Expand DownExpand Up@@ -259,7 +259,7 @@ user.sayHi(); // Ілля
## Підсумки

- Функції, які зберігаються у властивостях об’єкта, називаються "методами".
- Методи дозволяють об’єктам "діяти"подібно до `object.doSomething()`.
- Методи дозволяють об’єктам "діяти"як от `object.doSomething()`.
- Методи можуть посилатися на об’єкт завдяки `this`.

- Значення `this` визначається під час виконання.
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp