【问题标题】:How to differentiate between a method and a function? [duplicate]如何区分方法和函数? [复制]
【发布时间】:2017-05-06 18:06:28
【问题描述】:

我一直对这两者感到困惑。据我了解,方法总是使用点符号,例如:

$( "li.third-item" ).nextAll().addBack().css( "background-color", "red" );

在这种情况下,nextAll()addBack().css() 都是方法。

同样,函数也被直接调用。喜欢,

make_tea();

我想通过查看它的使用方式来确定某物是函数还是方法。使用PersonOne.run_now() 是否总是保证run_now() 是一种方法?如果我们使用. 来访问它,run_now() 仍然是一个函数吗?

我的问题是“当我们使用. 调用它时,函数会变成方法吗?”

【问题讨论】:

  • JavaScript 方法是可以对对象执行的操作。 JavaScript 方法是包含函数定义的属性。 src
  • 在 Javascript 中,方法和函数几乎是相同的——如前所述:方法只是附加到被描述为函数的对象的属性(唯一的区别是您将方法附加到类型或变量, 并且函数可以独立)
  • 其实所有的函数都是方法,因为我认为它们是window对象的一部分
  • @Jonasw:假设 javascript 正在浏览器中运行。据我所知,在 Node 中运行的 js 不一定会有 window 对象。
  • @Jonasw 反例:function () { function foo() {}; }

标签: javascript oop


【解决方案1】:

方法只是存储在object属性中的function引用。 Javascript 中的 Method 只是一个概念,实际上并不是一个现有的句法部分。另外,Javascript 中没有 method 关键字。

function foo() { /* whatever */ }

var bar = {};
bar.baz = foo;

// You'd consider this a function call
foo();

// While the following is actually syntactically also a function call
// you might consider baz a "method of the bar object"
bar.baz();
// and thus bar.baz() would then be a "method call".

请注意,要访问对象的属性,您有两种可能的方式:object.propertyobject[propertyName],其中propertyName 是包含属性名称的string

所以

bar.baz()

达到与

完全相同的效果
bar["baz"]().

【讨论】:

  • 是否像我在问题中那样使用.,保证这个特定的函数实际上是一个方法?
  • 请注意,Javascript 在这方面非常灵活……var f = o.f;f.call(o)……
  • 你为什么会关心?在语法上,在 JS 中,函数和方法没有区别。
  • @connexo 那么,我可以在 JavaScript 中互换使用这两个术语吗?
  • 存储在对象属性中的函数通常称为该对象的方法(即对象可以执行的操作)。
猜你喜欢
  • 2010-10-16
  • 2012-11-25
  • 1970-01-01
  • 2019-08-27
  • 2015-10-06
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
相关资源
最近更新 更多