Javascript 方法和函数之间有什么区别?如何声明一个方法?

Javascript 方法和函数之间有什么区别?如何声明一个方法?,javascript,function,methods,Javascript,Function,Methods,我正在Codecademy上学习Javascript。正如我所理解的,方法是一个和对象相关联的函数。我认为把它称为方法应该是在对象内部。它是?我真的应该充分理解函数和方法之间的主要区别,以编写无错误代码。这让我很困惑 下面是Codecademy代码,他们在第2行说“setAge”是一个方法,它显然看起来像一个函数。它甚至与任何对象都没有关系。因为它甚至不在任何物体的内部 // here we define our method using "this", before we even intro

我正在Codecademy上学习Javascript。正如我所理解的,方法是一个和对象相关联的函数。我认为把它称为方法应该是在对象内部。它是?我真的应该充分理解函数和方法之间的主要区别,以编写无错误代码。这让我很困惑

下面是Codecademy代码,他们在第2行说“setAge”是一个方法,它显然看起来像一个函数。它甚至与任何对象都没有关系。因为它甚至不在任何物体的内部

// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
  this.age = newAge;
};

// now we make bob
var bob = new Object();
bob.age = 30;
bob.setAge = setAge;

// make susan here, and first give her an age of 25
var susan = new Object();
susan.age = 25;
susan.setAge = setAge;
susan.setAge(35);
// here, update Susan's age to 35 using the method

这是一个很好的问题,我知道这会让人困惑。似乎他们将其称为方法,因为他们后来修改了
bob
对象以包含函数,从而使其成为“方法”

其代码相当于以下代码:

bob.setAge = function (newAge) {
  this.age = newAge;
};

你对方法的理解是正确的。

正如其他人所说,方法和函数有很多共同点,事实上所有方法都是函数

最大的区别是,方法附加到对象,并且调用该对象时设置
this

我制作了一个片段来演示

“严格使用”;
var bob={
布尔:是的
};
bob.test=函数(){
console.log(“this=”,this);
};
log(“这是bob测试和‘this’”);
测试();
//分离方法
var tmp=bob.test;
//在严格模式下,这将是未定义的。
//在“非严格”中,它将与“窗口”相同`

tmp()
从技术上讲,它是一个后来用作方法的函数。我认为您的示例中缺少了一些东西。它也是一个通过变量
setAge
引用的匿名函数,而不是名为
setAge
的函数。整个问题真的很糟糕,令人困惑。可能是重复的。另请参见泛型。两者的区别在于如何调用它们。如果没有bind/call/apply(或映射/筛选的第二个参数等),函数中的
this
指的是函数作为属性的对象,这使它成为
this
的方法,或者如果
this
未定义,则您知道您有一个非方法。它与全局函数一致,全局函数是
窗口的方法(从技术上讲,但没有人这么说…)基本上,JS中唯一的非方法是私有(嵌套)函数,但是任何
这个
-使用函数都可以用作方法;它变成了一种方法?谢谢,如果您运行
typeofbob
,您将获得
对象
,如果您运行
typeofbob.setAge
您将获得
函数
。我们将作为对象属性的函数称为“方法”。@DhanuAT:它就是这样工作的。在对象上调用的函数称为“方法”。方法不需要附加到对象。它也可以被继承,或者完全独立:
setAge.call(susan,15)
bob.setAge = function (newAge) {
  this.age = newAge;
};