Рубрики
Uncategorized

Что такое метод JavaScript? Руководство по методам JavaScript

1. Что такое метод, давайте определим и вызовут регулярную функцию: Function Greet (Кто) {r … с меткой JavaScript, WebDev, DevOps, программирование.

1. Что такое метод

Давайте определим и вызовут регулярную функцию:

function greet(who) {
  return `Hello, ${who}!`;
}

greet('World'); 

Ключевое слово функции, сопровождаемое его именем, параметром и телом: функция приветствия (кто) {…} делает регулярное определение функции.

Приветствие («Мир») — это регулярный вызов функции. Функция приветствия («Мир») принимает данные из аргумента.

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

Давайте сделаем Greet () метод на объектном мире:

const world = {
  who: 'World',

  greet() {    return `Hello, ${this.who}!`;  }}

world.greet(); 

Greet () {...} теперь это метод, который принадлежит мировому объекту. World.greet () — это метод.

Внутри метода Greet () Это указывает на объект, к которому принадлежит метод — мир. Вот почему это. Кто выражение обращается к собственности, кто.

Обратите внимание, что это также называется контекстом.

Контекст не является обязательным

Хотя в предыдущем примере я использовал это для доступа к объекту, к которому принадлежит метод — JavaScript, однако, не налагает метод для его использования.

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

const namespace = {
  greet(who) {
    return `Hello, ${who}!`;
  },

  farewell(who) {
    return `Good bye, ${who}!`;
  }
}

namespace.greet('World');    
namespace.farewell('World'); 

Пространство имен — это объект, который содержит 2 метода: namespace.greet () и namespace.farewell () Анкет

Методы не используют это, а пространство имен служит владельцем одинаковых методов.

2. Объект буквального метода

Как видно в предыдущей главе, вы можете определить метод непосредственно в буквальном объекте:

const world = {
  who: 'World',

  greet() {    return `Hello, ${this.who}!`;  }};

world.greet(); 

Greet () {....} это метод, определяемый на объектном буквальном языке. Такой тип определения называется определением метода сокращения (доступный начинающий ES2015).

Есть также более длинный синтаксис определения методов:

const world = {
  who: 'World',

  greet: function() {    return `Hello, ${this.who}!`;  }}

world.greet(); 

Приветствую: function () {...} это определение метода. Обратите внимание на дополнительное присутствие толстой кишки и функция ключевое слово.

Динамически добавление методов

Метод — это просто функция, которая хранится как свойство на объекте. Вот почему вы можете динамически добавлять методы к объекту:

const world = {
  who: 'World',

  greet() {
    return `Hello, ${this.who}!`;
  }
};


world.farewell = function () {
  return `Good bye, ${this.who}!`;
}

world.farewell(); 

Мир Сначала объект не имеет метода прощание . Это добавлен динамически.

Динамически добавленный метод может быть вызван как метод без проблем: World.farewell () Анкет

3. Класс метод

В JavaScript класс Синтаксис определяет класс, который будет служить шаблоном для его экземпляров.

У класса также могут быть методы:

class Greeter {
  constructor(who) {
    this.who = who;
  }

  greet() {    console.log(this === myGreeter);     return `Hello, ${this.who}!`;  }}

const myGreeter = new Greeter('World');
myGreeter.greet(); 

Greet () {...} это метод, определенный внутри класса.

Каждый раз, когда вы создаете экземпляр класса, используя новый оператор (например, Mygreeter Greeter ('World') ), методы доступны для вызова в созданный экземпляр.

mygreeter.greet () Как вы вызываете метод Greet () в экземпляре. Важно, чтобы это внутри метода равняется самому экземпляру: это равно Mygreeter Внутри Greet () {...} метод

4. Как вызвать метод

4.1 Метод вызов

Что особенно интересно в JavaScript, так это то, что определение метода на объекте или классе — это половина работы. Чтобы сохранить метод в контексте, вы должны убедиться, что метод вызовет метод.

Позвольте мне показать вам, почему это важно.

Вспомните мировой объект, имеющий метод Greet () на него. Давайте проверим, какое значение имеет это Когда Greet () вызывается как метод и как обычная функция:

const world = {
  who: 'World',

  greet() {
    console.log(this === world);    return `Hello, ${this.who}!`;
  }
};


world.greet(); 
const greetFunc = world.greet;

greetFunc(); 

World.greet () это метод вызова. Объектный мир, за которым следует точка, и, наконец, сам метод — это то, что делает метод вызов.

Greetfunc это та же функция, что и World.greet. Но когда вы называют обычную функцию Greetfunc () Это внутреннее приветствие () не равна мировому объекту, а скорее глобальному объекту (в браузере это окно).

Я называю выражения, как Greetfunc.greet отделение метода от его объекта. Когда позднее вызовет отдельный метод Greetfunc () сделает это равным глобальному объекту.

Отделение метода от его объекта может принимать разные формы:

const myMethodFunc = myObject.myMethod;


setTimeout(myObject.myMethod, 1000);


myButton.addEventListener('click', myObject.myMethod)



Чтобы не потерять контекст метода, обязательно используйте метод vocation world.greet () или связывайте метод вручную с объектом приветствовать func.greet.bind (это) .

4.2 Вызов непрямой функции

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

Добро пожаловать в непрямом вызова функции, который можно выполнить с помощью:

myFunc.call(thisArg, arg1, arg2, ..., argN);
myFunc.apply(thisArg, [arg1, arg2, ..., argN]);

Методы, доступные на объекте функции.

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

Например, давайте определим Greet () как обычная функция, и объект инопланетян, имеющих свойство ВОЗ:

function greet() {
  return `Hello, ${this.who}!`;
}

const aliens = {
  who: 'Aliens'
};

greet.call(aliens); 
greet.apply(aliens); 

Greet.call (инопланетяне) и Greet.apply (инопланетяне) оба являются непрямыми вызовами метода. это значение внутри Greet () Функция равна объекту инопланетян.

Косвенное призыв позволяет подражать вызова метода на объекте!

4.3.

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

Вы можете создать связанную функцию, используя специальный метод:

const myBoundFunc = myFunc.bind(thisArg, arg1, arg2, ..., argN);

Первый аргумент myfunc.bind (thisarg) это контекст, с которым будет связана функция.

Например, давайте повторно используем Greet () и свяжите его с инопланетяне Контекст:

function greet() {
  return `Hello, ${this.who}!`;
}

const aliens = {
  who: 'Aliens'
};

const greetAliens = greet.bind(aliens);

greetAliens(); 

Вызов Greet.Bind (инопланетяне) Создает новую функцию, в которой это связано с объектом Aliens.

Позже, при вызове связанной функции Greetaliens () , это равняется инопланетянам внутри этой функции.

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

5. Стрелка функционирует как методы

Использование функции стрелки в качестве метода не рекомендуется, и вот почему.

Давайте определим Greet () Метод в качестве функции стрелки:

const world = {
  who: 'World',

  greet: () => {
    return `Hello, ${this.who}!`;
  }
};

world.greet(); 

К сожалению, World.greet () Возвращает «Привет, не определен!» вместо ожидаемого 'Привет, мир!' .

Проблема заключается в том, что значение, которое это внутри функции стрелки, равна этому внешней области. Всегда. Но вы хотите, чтобы это было равным объекту мира.

Вот почему это внутри функции стрелки равна глобальному объекту: окно в браузере. «Привет, $ {this.who}! Оценивается как привет, $ {windows.who}! , что, в конце концов, «Привет, не определен!» .

Мне нравятся функции стрелы. Но они не работают как методы.

6. Резюме

Метод — это функция, принадлежащая объекту. Контекст метода ( это значение ) равняется объекту, к которому принадлежит метод.

Вы также можете определить методы на классах. это Внутри метода класса равна экземпляру.

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

myObject.myMethod('Arg 1', 'Arg 2');

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

myRegularFunc.call(myObject, 'Arg 1', 'Arg 2');
myRegularFunc.apply(myObject, 'Arg 1', 'Arg 2');


const myBoundFunc = myRegularFunc.bind(myObject);
myBoundFunc('Arg 1', 'Arg 2');

Косвенное вызов и ограничение подражают методу вызова.

Не пропустите: 1 Testdriven.io: django и pydantic 2. Python Pool: Numpy Cross Product в Python с примерами

Оригинал: «https://dev.to/coodignd/what-are-javascript-method-a-guide-to-javascript-methods-2b7a»