Метод и функция в чем разница
Перейти к содержимому

Метод и функция в чем разница

  • автор:

Разница между методом и функцией

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

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

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

Из-за этих, весьма существенных, отличий метод и получил отдельный термин, в некотором смысле сокращение от «Метод (способ) взаимодействия с классом или объектом».

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

PS: Это касается любых языков программирования, поддерживающих концепцию объектно-ориентированного программирования.

Чем метод отличается от функции в Python?

В отличие от функции, метод узко специализирован и может быть применен только к объектам, которые его поддерживают. Например, метод списков append() может быть применен только к ним. Применение данного метода к другим объектам, которые его не поддерживают (строки или кортежи) вызовет ошибку. Но есть и такие методы, которые хорошо работают с несколькими типами объектов, например метод count() может применяться к строкам, спискам или кортежам

13 февраля 2023

Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является self , то она становится связанным методом bound method , получившим доступ к атрибутам связанного объекта (экземпляра класса).

# Обычная функция: def greet(name): print(f'Hello, name>') class Person: # Инициализатор класса, требующий присваивать значение атрибута name при инстанцировании объекта def __init__(self, name): self.name = name # Связанный метод, имеющий доступ к атрибуту name: def greet(self): print(f'Hello , self.name>. ') bob = Person('Bob') # Вызов связанного метода класса: bob.greet() # => Hello , Bob. # Вызов функции, не имеющий доступа к атрибутам объекта: greet(bob) # => Hello, # Вызов обычной функции, которой можно передать любое значение: greet('Bob') # => Hello, Bob greet(23) # => Hello, 23 greet('apple') # => Hello, apple 

Vanilla JS

Разница между функцией, методом и вызовом конструктора объектов.

Функция — обычный вызов независимой функции.

function hello(username) return «hello, » + username;
>
hello(«Boris»); // «hello, Boris»

Функция может обращаться к глобальному объекту.

var username = ‘Boris’;

function hello() return «hello, » + this.username;
>

hello(); // «hello, Boris»

Однако в строгом режиме ES5 this = undefined.

function hello() «use strict»;
return «hello, » + this.username;
>
hello(); // error: cannot read property «username» of undefined

Метод — функция привязанная к объекту.

var obj = hello: function() return «hello, » + this.username;
>,
username: «Boris»
>;
obj.hello(); // «hello, Boris»

Метод одного объекта можно привязать к другому объекту.

var obj2 = hello: obj.hello, // метод из первого объекта
username: «Boo»
>;
obj2.hello(); // «hello, Boo»

Также методом объекта может быть обычная функция, поскольку this всегда будет являться этот объект или window.

function hello() return «hello, » + this.username;
>

var obj1 = hello: hello,
username: «Gordon Gekko»
>;
obj1.hello(); // «hello, Gordon Gekko»

var obj2 = hello: hello,
username: «Biff Tannen»
>;
obj2.hello(); // «hello, Biff Tannen»

Функция конструктор объектов всегда вызывается с оператором new и всегда создает объект <>!

function User(name, passwordHash) this.name = name;
this.passwordHash = passwordHash;
>

var obj = new User(«sfalken», «0ef33ae791068ec64b502d6cb0191387»);

В отличии от обычных функций и методов функция конструктор всегда создает новый объект, к которому привязан this — этот объект.
Единственная задача функций конструкторов объектов — это создавать объекты, а не выполнять какие-либо действия.

Введение в методы и свойства

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/object.

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

Такие функции называют «методами», а значения – «свойствами». Здесь мы рассмотрим основы использования свойств и методов.

Свойство str.length

У строки есть свойство length , содержащее длину:

alert( "Привет, мир!".length ); // 12

Можно и записать строку в переменную, а потом запросить её свойство:

var str = "Привет, мир!"; alert( str.length ); // 12

Метод str.toUpperCase()

Также у строк есть метод toUpperCase() , который возвращает строку в верхнем регистре:

var hello = "Привет, мир!"; alert( hello.toUpperCase() ); // "ПРИВЕТ, МИР!"

Вызов метода – через круглые скобки!

Обратите внимание, для вызова метода обязательно нужны круглые скобки.

Посмотрите, например, результат обращения к toUpperCase без скобок:

var hello = "Привет"; alert( hello.toUpperCase ); // function. 

Метод – это встроенная команда («функция», мы поговорим о них позже), которую нужно вызвать для получения значения. При обращении без скобок мы получим саму эту функцию. Как правило браузер выведет её как-то так: «function toUpperCase() < . >» .

А чтобы получить результат – нужно произвести её вызов, добавив скобки:

var hello = "Привет"; alert( hello.toUpperCase() ); // ПРИВЕТ

Более подробно с различными свойствами и методами строк мы познакомимся в главе Строки.

Метод num.toFixed(n)

Есть методы и у чисел, например num.toFixed(n) . Он округляет число num до n знаков после запятой, при необходимости добивает нулями до данной длины и возвращает в виде строки (удобно для форматированного вывода):

var n = 12.345; alert( n.toFixed(2) ); // "12.35" alert( n.toFixed(0) ); // "12" alert( n.toFixed(5) ); // "12.34500"

Детали работы toFixed разобраны в главе Числа.

Обращение к методам чисел

К методу числа можно обратиться и напрямую:

alert( 12.34.toFixed(1) ); // 12.3

…Но если число целое, то будет проблема:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *