在 JavaScript 中,函数什么时候变成方法?

In JavaScript when does a function become a method?

在 JavaScript 中,函数是作为 属性 添加到对象上时成为方法,还是函数针对对象的 调用使其成为方法的对象?

the specification中的定义是:

function that is the value of a property

由于每个函数 javascript 都是对象的一部分,从技术上讲它们都是方法。

就我个人而言,我会把区别放在绑定到一个对象上,如果你将一个函数绑定到一个特定的范围,它就是一个方法。

从技术上讲,javascript 没有技术上面向对象的方法。而是使用对象继承的原型模型(例如javascript没有class继承而是原型继承,不支持私有方法等,这些是两种模型的区别,例如"Javascript, the good parts").

无论如何,作为对象的 属性 添加的任何函数都可以作为对象的方法调用,例如 obj.my_method() 并且函数内部的 this 将动态地访问当前 object

另一种调用函数就好像它是方法 的方法是使用.call 功能。例如 my_method.call(obj) 这也是在 javascript 中使用私有方法的替代方法。可以定义一个函数,它不能作为对象 属性 访问,但可以像对象的方法一样调用,使用 .call 将函数内部的 this 绑定到当前对象。人们可以争辩说,以这种方式(或类似方式)调用的任何函数确实是 method,我不会争论它,也不会说别的。

喋喋不休地谈论术语不是编码。玩得开心