有的时候有的人类喜欢含沙射影,尤其大国发表战略发言,懂的人都懂,不懂的人怎么都不懂。编程语言为了区分变量所属,有时不指代,有时必须指代。
不同形态的this
- 最早SmallTalk提出self代表当前对象,ObjC和Python采用self,Python要求成员函数定义必须把self显式放在第一个参数(当然调用时不用显式指定self),而大部分其他语言并未强制要求。
- Eiffel用current.
- C++ this指针.
- Java/C#/Kotlin/仓颉 等用this.
- Visual Basic Me指代当前对象。
this的本质
- C++成员函数默认会被编译器增加一个this参数,以指代当前对象。产生此问题的根源是C++一套类代码可以支持无限的对象,每个对象都有自己独立的数据区,但代码区却是共用的。如果代码里无法指定哪个对象,将无法支持多个对象的数据独立操作。
- C语言可以模拟C++ this指针,只需要在函数第一个参数增加一个指向对象的指针即可。事实上,最早C++前端cfront就是利用类似这种方法将C++转换成C语言。