Разница между методом и функцией
Если разбираться детально, то и функция и метод — это некоторый фрагмент кода, который можно вызвать по имени и, опционально, передать ему какие-либо параметры. С этой точки зрения различий никаких нет.
С другой стороны, функция обычно включает в себя все необходимое для своей работы, а взаимодействие с внешним миром осуществляет через входные и выходные параметры, а также возвращаемое значение (использование глобальных переменных скорее исключение, а чаще просто грубая ошибка). Кроме того, функция является самостоятельной единицей и может быть вызвана в любом месте программы без ограничений (ну почти, необходимость подключения библиотек и т.д. оставим в стороне).
Метод же для своей работы может использовать поля объекта и/или класса, в котором определен, напрямую, без необходимости передавать их во входных параметрах. Это похоже на использование глобальных переменных в функциях, но в отличие от глобальных переменных, метод может получать прямой доступ только к членам класса. Метод привязан к классу, если он статический, или объекту и может быть вызван только через этот класс или объект.
Из-за этих, весьма существенных, отличий метод и получил отдельный термин, в некотором смысле сокращение от «Метод (способ) взаимодействия с классом или объектом».
В целом, называть метод функцией не является ошибкой (обратное неверно), главное понимать концептуальные отличия этих терминов.
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
…Но если число целое, то будет проблема: