各位看官,楼主开始说过写几篇博客,这是这个系列的最后一集。吾以为:了解JavaScript的身世之谜,掌握其近乎心想事成的变量系统,了解其解析运行的偷梁换柱之法,熟悉布大师迂回曲折的OOP实现。那你离height level也不远了。当然,要想height level还要再掌握两个常常被各位园友挂在嘴边的东西:this与闭包。this是什么鬼?闭包又是什么鬼?照本宣科的概念,这里不说,我们只聊“因为所以”。废话少说,开聊!
this是什么鬼?
this这玩儿称呼为鬼一点不为过,好多小白一看满屏都是this的脚本瞬间眩晕。看样子有点像Java、C#之类的this,但凭直觉好像又超越了Java、C#的this,看得是隐隐约约、似懂非懂。各种度娘、G哥大部分得到的都是照本宣科的解析。用心的会记下并研究的,无心的大大咧咧过目而已。于是乎,好多老鸟都没彻底搞清楚this是什么鬼。要想了解this是什么鬼,那得先了解这鬼是怎么来的。
话说JavaScript的设计初衷是过程式的,后面布大师为了紧跟时代潮流,迂回曲折地实现OOP,为此引入了this来表示实例对象。OOP是实现,但是JavaScript的世界从此多了一个this。this在应用于JavaScript的OOP时候,表示的是实例本身。但是如果我写的JavaScript并不需要new对象,而是随意到处写了this,那这个时候this代表什么?真所谓填一坑挖一坑啊!有坑得填啊,于是,布大师又想折子给这个this赋予意义了:当this应用于OOP的时候,它表示实例本身;而当this应用于非OOP的时候则表示this所在元素的归属对象。这话说来说去还是有点抽象,看代码最实在:
1)当this在function中,但是funciton只是过程式函数