2

有什么区别:

pause: function () {
    this.state.gamePaused = true;
},

function pause() {
    this.state.gamePaused = true;
}
4

4 回答 4

3

第一个示例可能是对象的一部分,这意味着 pause 是 Javascript 对象的函数,第二个示例 pause 作为独立函数。

我希望看到第一个示例,例如:

var someObject = {
  pause: function () {
    this.state.gamePaused = true;
  },
  anotherProperty : "some value"
}

因此它的用法如下:

someObject.pause();

另一方面,第二个示例的用法如下:

pause();
于 2012-11-29T05:18:12.317 回答
3

两者都是函数(又名方法),只是它们以两种不同的方式声明以在两种不同的设置中使用。

在 JS 中,您可以像这样定义对象:

var obj = {
    flagVariable:  false,
    intVariable:    115,
    stringVariable:  'hello world',
    functionVariable:  function() { alert("Hello world!"); }
}

在这个例子中,对象的最后一个属性是一个函数。这是一个匿名函数,这意味着它本身没有被命名。这就是为什么'function'和'()'之间没有名字的原因。因此,您可以使用分配给它的变量来引用它,如下所示:

foo.functionVariable();

您还可以传递它并通过分配给它的任何变量的名称来执行它:

var callback = foo.functionVariable;
callback();

你也可以在任何地方声明函数,所以在全局范围内你可以说:

function pause () {  alert("Hello world!"); }

这定义了一个命名函数,它可以在任何地方按名称执行:

pause(); 

顺便说一句,这也可以传递:

var callback = pause;
callback();
于 2012-11-29T05:24:07.350 回答
2

ECMAScript 将方法定义为作为属性值的函数。因此,当您将函数放在对象上时,我们将其称为该对象的方法。

所以要回答这个问题,第一个是方法。

ECMAScript 4.3.27 - 方法

函数是一个属性的值。

注意 当函数作为对象的方法被调用时,对象作为其this值传递给函数。

于 2012-11-29T13:46:57.837 回答
1
  1. 附加到一个对象,这仍然是一个函数,但称为一个方法。它附加到对象,它的this参数指的是该对象。像这样称呼它:obj.pause()

  2. 该函数定义在全局命名空间中,可以从任何地方调用,并附加到window对象上。this在函数中引用window对象。简单地这样称呼它:pause()

请注意,这两个函数实际上都是方法,尽管后者很少被称为一个。

于 2012-11-29T13:50:47.923 回答