为什么“this”在类函数/方法中使用时的行为与在匿名函数中使用时的行为方式不同。
例如
public MyClass
{
function myfun()
{
output(this) // << will show the instance of this class but not myfun() function
abc = function ()
{
output ( this ) // << will show abc function
}
abc()
}
}
那么,为什么“this”输出MyClass的实例但不输出myfun()。是什么让它与匿名函数不同?
答案 0 :(得分:3)
虽然具体的语言会有所不同,但匿名内联方法背后的一般思路是编译器会创建一个新类(可能是一些随机名称,仅供自己使用),在该类中将是一个方法(同样,可能给它自己使用的一些自动生成的名称),该方法将完成匿名方法的工作。然后在匿名方法的原始调用站点中,它创建此编译器生成的类的实例,并在该类中调用适当的方法。
因此,该匿名方法的定义实际上将从另一个类型中调用,而不是从声明匿名方法的类型中调用。