最近很多 Javascript初学者朋友总在问: Javascript 的this 关键字的用法。我在这里索性总结一下 this关键字的用法。
this 关键字是面向对象编程语言中的一个重要概念!在JAVA,C,C#,C++等语言中,this 总是指向当前的运行对象。但是在 Javascript ,由于javascript的动态性以及词法作用域特性,this的指向在运行时才确定。
this 关键字的用法其实比较复杂,不过你只要牢记一句话就可以:
“this 变量:永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。
如果处在匿名函数中、或者不处于任何对象中,this 都指向宿主的根对象(在浏览器里面就是 window)”
另外,javascript中还用 call() 和 apply() 来调用函数,再记住下面这两句话:
如果是call()、apply()、with(),指定的this是谁,就是谁 !
普通的函数调用,函数被谁调用,this就是谁。
(忽然想起:ECMAScript 5 的严格模式中,严禁使用 with() 函数,并且ECMAScript 3 中并不推荐使用 with())
上面的举例还是太过复杂,不太科学。我举一个更加直白的说明:Javascript 的 this 很花心,在哪个对象的家里,就是那个对象的。
而 C,C++,C# 的 this 很专一,无论在哪,都属于原配!
并且 Javascript 的函数作用域 则像出生地,出生在哪里,出生地就是哪里!和运行环境无关!(此处可参照《Javascript权威指南第六版》第8章!不过貌似只有淘宝前端翻译的纸质版本,人民币139大洋!这里有一个《Javascript权威指南第四版》,凑和着看吧。)
大致就这样吧,有问题,请留言。
此条目由 王子墨 发表在 前端随笔 分类目录,并贴了 javascript 标签。将固定链接加入收藏夹。