有人能简单解释OOP环境中的方法与函数吗?
当前回答
以下是使用JavaScript示例对方法与函数的一些解释:
测试(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=函数(char){var index=this.indexOf(char);如果(索引==-1){console.log(char+“不出现在”+this中);}其他{console.log(char+“是”+(this.length-index)+“字符串末尾的字符!”);}};var something=“ThisIsSomeString”//现在像这样使用distance,运行并检查控制台日志距离(“m”);
一些参考:Javascript对象方法,函数,原型的更多信息
其他回答
简单的记忆方式:
作用→ 免费(免费意味着它可以在任何地方,不需要在对象或类中)方法→ 成员(对象或类的成员)
函数和方法之间主要区别的非常一般的定义:
函数在类外部定义,而方法在类内部和类的一部分定义。
假设函数是一个代码块(通常有自己的作用域,有时也有自己的闭包),它可以接收一些参数,也可以返回结果。
方法是由对象拥有的函数(在某些面向对象的系统中,更正确的说法是由类拥有)。被对象/类“拥有”意味着您通过对象/类引用方法;例如,在Java中,如果要调用对象“door”拥有的方法“open()”,则需要编写“door.open()”。
通常,方法还会获得一些额外的属性,描述它们在对象/类中的行为,例如:可见性(与面向对象的封装概念相关),它定义了可以从哪些对象(或类)调用方法。
在许多面向对象的语言中,所有的“函数”都属于某个对象(或类),因此在这些语言中没有不是方法的函数。
只需两个字:非静态(“instance”)方法将一个隐藏指针指向“this”(作为其第一个参数),该对象就是您调用该方法的对象。
这是与常规独立函数的唯一区别,尽管是动态调度。
如果您感兴趣,请阅读以下详细信息。
我将尽量简短,并将使用C++作为示例,尽管我所说的几乎可以应用于每种语言。
对于您的CPU来说,函数和方法都只是一段代码。时期因此,当调用函数/方法时参数
好吧,我说过没有实际的区别。让我们再深入一点:
有两种类型的方法:静态和非静态静态方法类似于常规函数,但在类内部声明,该类的作用仅类似于命名空间非静态(“instance”)方法采用指向“this”的隐藏指针。这是与常规独立函数的唯一区别。
撇开动态调度不谈,这意味着它非常简单:
class User {
public string name; // I made it public intentionally
// Each instance method takes a hidden reference to "this"
public void printName(/*User & this*/) {
cout << this.name << endl;
}
};
相当于
public getName(User & user) {
// No syntactic sugar, passing a reference explicitly
cout << user.name << endl;
}
因此,本质上,user->printName()只是getName(user)的语法糖。
如果不使用动态调度,仅此而已。如果使用了它,那么它就有点复杂了,但是编译器仍然会发出一个看起来像函数的东西,将其作为第一个参数。
“method”是“function”的面向对象词。这几乎就是它的全部(即,没有真正的区别)。
不幸的是,我认为这里的很多答案都在延续或推进一种观点,即存在一些复杂而有意义的差异。
真的-没有那么多,只是对同一件事用不同的词。
[后期添加]
事实上,正如BrianNeal在对这个问题的评论中指出的那样,C++标准在引用成员函数时从不使用“方法”一词。有些人可能认为这表明C++并不是真正的面向对象语言;然而,我更倾向于将其作为一种迹象,即一群相当聪明的人并不认为有特别强烈的理由使用不同的术语。