В чем разница между методом и функцией?

Вы можете сделать это с помощью Windows API. Вот пример кода на C #, который будет переключать значки на рабочем столе.

    [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", SetLastError = true)] static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
    enum GetWindow_Cmd : uint
    {
        GW_HWNDFIRST = 0,
        GW_HWNDLAST = 1,
        GW_HWNDNEXT = 2,
        GW_HWNDPREV = 3,
        GW_OWNER = 4,
        GW_CHILD = 5,
        GW_ENABLEDPOPUP = 6
    }
    [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

    private const int WM_COMMAND = 0x111;

    static void ToggleDesktopIcons()
    {
        var toggleDesktopCommand = new IntPtr(0x7402);
        IntPtr hWnd = GetWindow(FindWindow("Progman", "Program Manager"), GetWindow_Cmd.GW_CHILD);
        SendMessage(hWnd, WM_COMMAND, toggleDesktopCommand, IntPtr.Zero);
    }

Отправляет сообщение в дочернее окно SHELLDLL_DefView Progman, которое сообщает ему переключать видимость (путем добавления или удаления стиля WS_VISIBLE) это только ребенок, «FolderView». «FolderView» - это фактическое окно, содержащее значки.

Чтобы проверить, видны ли значки или нет, вы можете запросить стиль WS_VISIBLE с помощью функции GetWindowInfo, показанной ниже:

    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi);

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
        private int _Left;
        private int _Top;
        private int _Right;
        private int _Bottom;
    }

    [StructLayout(LayoutKind.Sequential)]
    struct WINDOWINFO
    {
        public uint cbSize;
        public RECT rcWindow;
        public RECT rcClient;
        public uint dwStyle;
        public uint dwExStyle;
        public uint dwWindowStatus;
        public uint cxWindowBorders;
        public uint cyWindowBorders;
        public ushort atomWindowType;
        public ushort wCreatorVersion;

        public WINDOWINFO(Boolean? filler)
            : this()   // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)".
        {
            cbSize = (UInt32)(Marshal.SizeOf(typeof(WINDOWINFO)));
        }

    }

Вот функция, вызывающая вышеуказанный код и возвращающая значение true, если окно видимо, false, если нет.

    static bool IsVisible()
    {
        IntPtr hWnd = GetWindow(GetWindow(FindWindow("Progman", "Program Manager"), GetWindow_Cmd.GW_CHILD), GetWindow_Cmd.GW_CHILD);
        WINDOWINFO info = new WINDOWINFO();
        info.cbSize = (uint)Marshal.SizeOf(info);
        GetWindowInfo(hWnd, ref info);
        return (info.dwStyle & 0x10000000) == 0x10000000;
    }

Код API Windows, а также дополнительная информация о стилях окна можно найти здесь: http://www.pinvoke.net/default.aspx/user32/GetWindowInfo.html

1613
задан Duc Filan 5 June 2018 в 12:25
поделиться

30 ответов

Функция - это фрагмент кода, который вызывается по имени. Это может быть передано данные для работы (то есть параметры) и может дополнительно возвращать данные (возвращаемое значение). Все данные, которые передаются в функцию, передаются явно.

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

  1. Метод неявно передается объект, на котором он был вызван.
  2. Метод может работать с данными, содержащимися в классе (помня, что объект является экземпляром класса - класс является определением, объект является экземпляром этих данных).

(это упрощенное объяснение, игнорируя вопросы объема и т. Д.)

1674
ответ дан Nhan 5 June 2018 в 12:25
поделиться

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

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

2
ответ дан A H M 5 June 2018 в 12:25
поделиться

В C ++ иногда метод используется для отражения понятия функции-члена класса. Однако недавно я нашел утверждение в книге «Язык программирования C ++, 4-е издание», на странице 586 «Производные классы»

Виртуальную функцию иногда называют методом.

Это немного сбивает с толку, но он сказал иногда , так что это примерно имеет смысл, создатель C ++ склонен видеть методы, так как функции могут вызываться на объектах и ​​могут вести себя полиморфно.

0
ответ дан Lance LI 5 June 2018 в 12:25
поделиться

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

Метод - это концепция Объектно-ориентированного программирование , где метод является членом класса, который в основном выполняет обработку для членов класса.

3
ответ дан Akshay Khale 5 June 2018 в 12:25
поделиться

В приближении первого порядка метод (в ОО стиле C ++) - это другое слово для функции-члена, которая является частью класса.

В таких языках, как C / C ++, вы можете иметь функции, которые не являются членами класса; Вы не вызываете функцию, не связанную с классом, методом.

4
ответ дан Captain Segfault 5 June 2018 в 12:25
поделиться

Насколько я понимаю, метод - это любая операция, которая может быть выполнена в классе. Это общий термин, используемый в программировании.

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

Например, допустим, вы хотите описать кошку и хотели бы, чтобы она могла зевать. Вы должны создать класс Cat с методом Yawn, который, скорее всего, будет функцией без какого-либо возвращаемого значения.

4
ответ дан marcj 5 June 2018 в 12:25
поделиться

Метод на объекте.
Функция не зависит от объекта.

Для Java есть только методы.
Для C есть только функции.

Для C ++ это будет зависеть от того, находитесь ли вы в классе.

920
ответ дан J. Scott Elblein 5 June 2018 в 12:25
поделиться

Я не эксперт, но это то, что я знаю:

  1. Функция - это язык языка C, он относится к коду кода, а имя функции будет идентификатором используйте эту функцию.

  2. Метод - это термин OO, обычно он имеет указатель this в параметре функции. Вы не можете вызвать этот кусок кода, как C, вам нужно использовать объект для его вызова.

  3. Методы вызова также различны. Здесь используйте значение для поиска адреса этого фрагмента кода. C / C ++, время связывания будет использовать символ функции для определения местоположения.

  4. Objecive-C отличается. Вызывать значение функции C, чтобы использовать структуру данных для поиска адреса. Это означает, что все известно во время выполнения.

2
ответ дан Tshepang 5 June 2018 в 12:25
поделиться

Метод - это название действия. Функция - это идентификатор метода.

-5
ответ дан nihar m. 5 June 2018 в 12:25
поделиться

В мире ОО эти два понятия обычно означают одно и то же

С чисто математической и CS-точки зрения функция всегда будет возвращать один и тот же результат при вызове с одинаковыми аргументами (f (x, y) = (x + y)). С другой стороны, метод, как правило, связан с экземпляром класса. Тем не менее, большинство современных ОО-языков больше не используют термин «функция» по большей части. Многие статические методы могут быть очень похожи на функции, так как они обычно не имеют состояния (не всегда true).

17
ответ дан TheSoftwareJedi 5 June 2018 в 12:25
поделиться

ИМХО люди просто хотели придумать новое слово для облегчения общения между программистами, когда они хотели ссылаться на функции внутри объектов.

Если вы говорите о методах, вы имеете в виду функции внутри класса. Если вы говорите «функции», вы имеете в виду просто функции вне класса.

Правда в том, что оба слова используются для описания функций. Даже если вы использовали это неправильно, ничего плохого не происходит. Оба слова хорошо описывают то, чего вы хотите достичь в своем коде.

Функция - это код, который должен играть роль ( функция ) в выполнении чего-либо. Метод - метод для решения проблемы.

Это делает то же самое. Это то же самое. Если вы хотите быть очень точным и следовать соглашению, вы можете вызывать методы как функции внутри объектов.

3
ответ дан Morfidon 5 June 2018 в 12:25
поделиться

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

http://en.wikipedia.org/wiki/Method_ (computer_science)

13
ответ дан Statement 5 June 2018 в 12:25
поделиться

Исторически сложилось так, что между «методом» было что-то, что не возвращает значения, и «функцией», которая делает это. В каждом языке есть свой собственный лексикон терминов с особое значение

В «C» слово «функция» означает программную программу .

В Java термин «функция» не имеет какого-либо особого значения. Принимая во внимание, что «метод» означает одну из подпрограмм, которая формирует реализацию класса.

В C # это будет переводиться как:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

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

12
ответ дан Jaimin Patel 5 June 2018 в 12:25
поделиться

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

Метод - это функция, которой владеет объект (в некоторых объектно-ориентированных системах правильнее будет сказать, что он принадлежит классу). «Владение» объектом / классом означает, что вы обращаетесь к методу через объект / класс; например, в Java, если вы хотите вызвать метод "open ()", принадлежащий объекту "door", вам нужно написать "door.open ()".

Обычно методы также получают некоторые дополнительные атрибуты, описывающие их поведение в объекте / классе, например: видимость (связанная с объектно-ориентированной концепцией инкапсуляции), которая определяет, из каких объектов (или классов) метод может быть вызван .

Во многих объектно-ориентированных языках все «функции» принадлежат некоторому объекту (или классу), поэтому в этих языках нет функций, которые не являются методами.

15
ответ дан Mike Tunnicliffe 5 June 2018 в 12:25
поделиться

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

В C языке используется термин функция. Java & amp; C # люди сказали бы, что это метод (и функция в этом случае определяется внутри класса / объекта).

C ++ программист мог бы назвать это функцией или иногда методом (в зависимости от того, пишут ли они код на C ++ процедурного стиля или делают объектно-ориентированный способ на C ++, программист, работающий только на C / C ++, вероятно, вызовет это функция, потому что термин «метод» реже используется в литературе C / C ++).

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

result = mySum(num1, num2);


Вы бы вызвали метод, ссылаясь на его объект сначала, как,

result = MyCalc.mySum(num1,num2);
12
ответ дан Tshepang 5 June 2018 в 12:25
поделиться

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

Возьмите следующий пример на python:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

В приведенном примере показан класс с именем «Дверь», у которого есть метод или действие с именем «open», он называется методом, потому что он был объявлен внутри класса. Ниже есть еще одна часть кода с «def», которая определяет функцию, это функция, потому что она не объявлена ​​внутри класса, эта функция вызывает метод, который мы определили внутри нашего класса, как вы можете видеть, и, наконец, функция работает называется само по себе.

Как вы можете видеть, вы можете вызывать функцию где угодно, но если вы хотите вызвать метод, либо вы должны передать новый объект того же типа, что и класс, метод которого объявлен (Class.method (object)), или вы должен вызывать метод внутри объекта (object.Method ()), по крайней мере, в python.

Думайте о методах как о вещах, которые может выполнять только одна сущность, поэтому, если у вас есть класс Dog, имеет смысл иметь функцию лая только внутри этого класса, и это будет метод, если у вас есть также класс Person, он может имеет смысл написать функцию «feed», поскольку она не принадлежит ни одному классу, так как можно кормить как людей, так и собак, и вы можете вызывать эту функцию, поскольку она не принадлежит ни к какому классу в частности.

89
ответ дан Gustavo Rubio 5 June 2018 в 12:25
поделиться

В ОО-языках, таких как Object Pascal или C ++, «метод» - это функция, связанная с объектом. Так, например, объект «Собака» может иметь функцию «кора», и это будет считаться «Методом». Напротив, функция «StrLen» стоит отдельно (она предоставляет длину строки, предоставленной в качестве аргумента). Таким образом, это просто «функция». Javascript также технически объектно-ориентирован, но сталкивается со многими ограничениями по сравнению с полноценным языком, таким как C ++, C # или Pascal. Тем не менее, это различие должно сохраняться.

Пара дополнительных фактов: C # полностью объектно-ориентирован, поэтому вы не можете создавать автономные «функции». В C # каждая функция связана с объектом и, таким образом, технически является «методом». Главное, что в C # мало кто называет их «методами» - они просто используют термин «функции», потому что не нужно проводить никаких различий.

Наконец, точно так же, как и все гуру Паскаля, не прыгайте на меня здесь. Паскаль также различает «функции» (которые возвращают значение) и «процедуры», которые этого не делают. C # не делает этого различия явно, хотя вы, конечно, можете выбрать возвращать значение или нет.

8
ответ дан Mark Brittingham 5 June 2018 в 12:25
поделиться

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

В то время как метод - это функция, которая используется для манипулирования данными объекта, которому он принадлежит. Технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена ​​в классе, это не метод; Это называется плохой дизайн.

8
ответ дан 5 June 2018 в 12:25
поделиться

Различие между методами и функциями

Из прочтения этого документа в Microsoft

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

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

2
ответ дан Siraj Alam 5 June 2018 в 12:25
поделиться

для меня: функция метода и функция одинаковы, если я согласен, что:

  • функция может возвращать значение
  • может ожидать параметры

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

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

new Employer().calculateSum( 8, 8 );

Делая это таким образом, я могу рассчитывать на то, что работодатель будет нести ответственность за расчеты. Если он хочет больше денег, я освобождаю его и позволяю функции сборщика мусора избавляться от неиспользованных сотрудников делать все остальное и получать нового сотрудника.

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

7
ответ дан Dirk Schumacher 5 June 2018 в 12:25
поделиться

Простой способ запомнить:

  • F unction → F ree (Свободные средства не принадлежат объекту или классу)
  • M ethod → ​​ M ember (член объекта или класса)
42
ответ дан Duc Filan 5 June 2018 в 12:25
поделиться

«метод» является объектно-ориентированным словом для «функция» . Это в значительной степени все, что есть (т.е. никакой реальной разницы).

К сожалению, я думаю, что многие ответы здесь увековечивают или продвигают идею, что есть какое-то сложное, значимое различие.

Действительно - здесь не так уж много, просто разные слова для одной и той же вещи.

[позднее добавление]


Фактически, как Брайан Нил указал в комментарии к на этот вопрос , стандарт C ++ никогда не использует термин 'метод' при обращении к функциям-членам. Некоторые люди могут принять это как признак того, что C ++ на самом деле не является объектно-ориентированным языком; однако я предпочитаю воспринимать это как признак того, что довольно умная группа людей не думала, что есть особенно веская причина использовать другой термин.

203
ответ дан Community 5 June 2018 в 12:25
поделиться

Методы класса действуют на экземпляр класса, называемый объектом.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}
8
ответ дан Statement 5 June 2018 в 12:25
поделиться

Класс - это набор некоторых данных и, при желании, функции с помощью конструктора.

При создании экземпляра (копирования, репликации) этого конкретного класса конструктор инициализирует класс и возвращает объект.

Теперь класс становится объектом (без конструктора) & amp; Функции известны как метод в контексте объекта.

Таким образом, в основном

Класс < == new ==> Объект

Функция < == new ==> Метод

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

Хотя класс может иметь статический блок, экземпляр блок, конструктор, функция Объект обычно имеет только данные & amp; Метод.

0
ответ дан Subrat Kumar Palhar 5 June 2018 в 12:25
поделиться

Функция - это математическая концепция. Например:

f(x,y) = sin(x) + cos(y)

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

Метод, с другой стороны, является функцией, которая связана с объектом на объектно-ориентированном языке. У него есть один неявный параметр: объект, на который воздействуют (и это состояние).

Итак, если у вас есть объект Z с методом g (x), вы можете увидеть следующее:

Z.g(x) = sin(x) + cos(Z.y)

В этом случае параметр x передается так же, как в Пример функции ранее. Однако параметр cos () - это значение, которое живет внутри объекта Z. Z, а данные, которые живут внутри него (Z.y), являются неявными параметрами для метода g's ().

12
ответ дан Bradley Mazurek 5 June 2018 в 12:25
поделиться

Очень общее определение основного различия между функцией и методом :

Функции определены вне классов, а методы определены внутри и часть классов.

40
ответ дан Andrew Tobilko 5 June 2018 в 12:25
поделиться

Если вы чувствуете, что читаете здесь, то это «Мое введение в ОО-методы»

Идея, лежащая в основе объектно-ориентированной парадигмы, заключается в том, чтобы «угрожать» программному обеспечению, состоящему из ... хорошо «объектов». Объекты в реальном мире имеют свойства, например, если у вас есть Сотрудник, у сотрудника есть имя, идентификатор сотрудника, должность, он принадлежит к отделу и т. Д. И т. Д.

Объект также знает, как обращаться с его атрибутами и выполнять некоторые операции с ними. Допустим, если мы хотим знать, что сотрудник делает прямо сейчас, мы спросим его.

employe whatAreYouDoing.

То, что whatAreYouDoing - это «сообщение», отправленное объекту. Объект знает, как ответить на эти вопросы, говорят, что у него есть «метод» для решения вопроса.

Итак, способ, которым объекты должны демонстрировать свое поведение, называется методами. Методы, таким образом, являются объектом артефакта, который должен что-то «делать».

Другими возможными методами являются

employee whatIsYourName
employee whatIsYourDepartmentsName

и т. Д.

Функции с другой стороны - это способы, которыми язык программирования должен вычислять некоторые данные, например, у вас может быть функция addValues ​​(8, 8), которая возвращает 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Поскольку первые популярные языки программирования ( такие как fortran, c, pascal) не охватывают парадигму ОО, они только называют эти артефакты «функциями».

Например, предыдущая функция в C была бы такой:

int addValues( int x, int y ) 
{
   return x + y;
}

Не естественно говорить, что у объекта есть «функция» для выполнения какого-либо действия, потому что функции больше связаны с математическим материалом в то время как Employee имеет немного математики, но у вас могут быть методы, которые выполняют те же функции, что и функции, например, в Java это будет эквивалентная функция addValues.

public static int addValues( int x, int y ) {
    return x + y;
}

Выглядит знакомо? Это потому, что Java имеет свои корни на C ++ и C ++ на C.

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

Вот пример ранее работающего объекта Java на Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

Разница тогда заключается в «домене», где он применяется.

У AppleScript есть идея «естественного языка», которая в какой-то момент была у ОО. Например, Smalltalk. Я надеюсь, что после прочтения вам, возможно, будет легче понять методы объектов.

ПРИМЕЧАНИЕ: код не должен быть скомпилирован, просто для примера. Не стесняйтесь изменить пост и добавить пример Python.

27
ответ дан 3 revs 5 June 2018 в 12:25
поделиться

Вот некоторые объяснения метода и функции с использованием примеров JavaScript:

test(20, 50); - определение функции и использование для выполнения некоторых шагов или возврата чего-либо, что может быть сохранено / использовано где-то.

Вы можете повторно использовать код: определите код один раз и используйте его много раз.

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

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); здесь test () может быть методом некоторого объекта или пользовательским образом заданным прототипом для встроенных объектов, вот более подробное объяснение:

Методы JavaScript - это действия, которые можно выполнять над объектами.

Метод JavaScript - это свойство, содержащее определение функции.

Встроенное свойство / метод для строк в javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Пользовательский пример:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

Вы также можете определить свойства для String, Array и т. Д. например,

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Некоторые ссылки: Метод объектов Javascript , Функции , Подробнее о прототипе

1
ответ дан Lahar Shah 5 June 2018 в 12:25
поделиться

Поскольку вы упомянули Python, следующее может быть полезной иллюстрацией связи между методами и объектами в большинстве современных объектно-ориентированных языков. В двух словах, то, что они называют «методом», - это просто функция, которой передается дополнительный аргумент (как указывали другие ответы), но Python делает это более явным, чем большинство языков.

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

Теперь сравните функцию greet_with_greeter и метод greet: единственное отличие - это имя первого параметра (в функции, которую я назвал «приветствующий», в методе, который я назвал «сам») ). Поэтому я могу использовать метод greet точно так же, как я использую функцию greet_with_greeter (используя синтаксис «точка», чтобы определить его, поскольку я определил его внутри класса):

Greeter.greet(hello_greeter, "World")

Итак, я фактически превратил метод в функцию. Могу ли я превратить функцию в метод? Итак, поскольку Python позволяет связываться с классами после их определения, давайте попробуем:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Да, функция greet_with_greeter теперь также называется методом greet2. Это показывает единственную реальную разницу между методом и функцией: когда вы вызываете метод «на» объекте, вызывая object.method(args), язык волшебным образом превращает его в method(object, args).

(ОО-пуристы могут утверждать, что метод - это нечто отличное от функции, и если вы попадаете в продвинутый Python или Ruby - или Smalltalk! - вы начнете понимать их точку зрения. Также некоторые языки предоставляют методам специальный доступ к битам объект. Но основным концептуальным отличием остается скрытый дополнительный параметр.)

8
ответ дан Sam Stokes 5 June 2018 в 12:25
поделиться

Они являются часто взаимозаменяемыми, но метод обычно является функцией класса, и , функция обычно вне класса. например, в рубине:


# function

def sqr(a)
   puts a ** 2
end


class Math2

   # method

   def initialize(a)
      puts a ** 2
   end
end

В Java, где все (кроме пакета и операторов импорта) должно быть в классе, люди могли бы всегда называть их "методами".

0
ответ дан Rhodochrosite-613 4 October 2019 в 07:31
поделиться
  • 1
    Это - вероятно, правильный подход, но на него нужно указать это что it' s выполнение распечатывает атрибуты , не вещи под названием Свойства в модернизированных классах в Python и этом it' s выполнение его на основе экземпляр из класса, не самого класса (потому что эти атрибуты don' t существуют, пока экземпляр класса не создается, и __ init __ () назван). Также, если какие-либо другие атрибуты будут созданы позже, они будут опущены, очевидно. – martineau 11 May 2011 в 20:52
Другие вопросы по тегам:

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