方法表达式
按调用方式不同,方法可分为expression和value两种模式。
- 表达式模式将方法视作普通函数,须显式传入receiver参数。
- 值模式打包receiver和function,以便传递和稍后调用。
方法本身可以看作函数,把函数赋值给一个变量很正常,同样的,方法也可以这样做,但是处理时候有两种方法,第一种用类型表达是一个普通的函数,因为它没有和实例相绑定,调用的时候必须显式的提供参数,第二种用实例表达是绑定方法,它带有两部分信息,第一是函数,第二是当前实例,接下来调用方法的时候自动展开。我们把第一种称之为方法表达式(Method Expression),没有和某个实例相绑定,只有函数,第二种称之为方法值(Method Value),有函数和当前对象实例复制品,实例复制品和参数有关系,如果是指针,复制品就是指针,如果是值类型,复制品就是完整的复制。它和闭包做法一样。
class A{
a()
b()
c()
}
x = new A()
x.a()
x.b() //method call
A.a(x)
A.b(x) //method expression
var z = x.a //method value
z() //===>x.a