Задать вопрос
@Geo5

Метод это функция или свойство?

В разных источниках пишут по разному. Где-то написано, что метод - функция являющаяся свойством, а где-то написано, что метод - свойство, значением которого является функция. Так что же такое в итоге метод?
  • Вопрос задан
  • 1098 просмотров
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 4
@twoone
В классике метод (method) это функция ассоциированная с экземпляром класса (instance) (его объектом) или в случае статического метода непосредственно с самим классом. Свойствами (properties) называют геттеры (getters/get) или сетторы (setters/set). Так же геттер обозначают как акссесор, а сеттор как мутатор. Но зачастую можно встретить упоминание что геттер и сеттор, это аксессоры. Если метод содержит логику, то данные ассоциируются с полями (field). Методы, поля и свойства обозначают как члены (members) объекта\класса.

Реализация классов в JavaScript отличается от классической поскольку построена на прототипах, что вносит некую долю путаницы. Путанница связанна с тем, что проблемы возникающие от потери контекста (this) вынуждают разработчиков изучать javascript намного глубже, чем это требуется в других классических языках. Из-за того что на уровне движка v8 все является членами объекта, то большинство склоняется что все в объекте это поля. И до момента объявления непосредственно методов {method(){}} это было справедливо. После необходимо разделять эти понятия даже если это всего лиш синтаксический сахар, поскольку даже в классических языках методы на самом низком уровне не могут быть чем-то отличными от полей. И всеже для ясности из называют методами.

Исходя из всего этого методы точно не могут обозначатся свойствами.
Ответ написан
Aetae
@Aetae Куратор тега JavaScript
Тлен
По сути в javascript не было никаких "методов" изначально. Только объекты, функции и свойства объектов. Слово "метод" пришло из других языков, где методы - отдельная сущность. Потому в javascript методом называется то, что выглядит как метод, не более.)
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Объекты в ООП содержат "данные" и "поведение"
Методы - это и есть поведение, но не данные.

Являются ли они при этом свойством технически - вопрос второстепенный, и зависит от реализации. Вообще "свойство" это что-то среднее между "полем" и "методом".
A property, in some object-oriented programming languages, is a special sort of class member, intermediate in functionality between a field (or data member) and a method. The syntax for reading and writing of properties is like for fields, but property reads and writes are (usually) translated to 'getter' and 'setter' method calls. The field-like syntax is easier to read and write than many method calls[citation needed], yet the interposition of method calls "under the hood" allows for data validation, active updating (e.g., of GUI elements), or implementation of what may be called "read-only fields".
https://en.wikipedia.org/wiki/Property_(programming)

В js, например, вы можете в любое поле объекта присвоить функцию прямо в рантайме, а во многих других языках - не можете.
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Класс содержит данные и функции. Вот эти функции и называются методами класса (или экземпляра класса, т.е. объекта).
Свойство это оболочка методов чтения и записи, т.е. при записи:
Prop:= Prop * 2;
слева будет вызван метод записи, а справа метод чтения.
(писал про Delphi)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы