关于 This
它是 JS 关键字, 在 JS 中具有特殊意义, 代表一个空间地址;
this 是执行的主体, 谁执行的这个函数谁就是 this.
惹人烦恼的 this
This 是什么? 什么是 this 指针? this 指针指向哪里? 何时使用 this?use or not use, that is a question.
其中至关重要的 this 指向问题, 不仅自身麻烦, 而且各类层出不穷的相关面试题更是让人应接不暇. 既然这么麻烦, 难倒无数 JS 开发 er, 我们到底要做怎样的挣扎才能记住呢? 且听下回... 哦不, 且往下看.
THIS
首先, 我们介绍下关于 this.
1. 什么是 this 指针? this 指针指向哪里? 何时使用 this?
在 JavaScript 中, 在创建函数时, 系统默认会生成的两个隐式参数: this 和 arguments. 函数执行时, 自动生成的一个内部对象, 只能在函数内部使用. this 指针指向与该函数调用进行隐式关联的一个对象, 该对象被称为 "函数上下文".this 是 JS 的一个关键字, 随着函数使用场合不同, this 的值会发生变化.
this 永远指向其所在函数的真实调用者 (谁调用的就指向谁,) 如果没有所有者时, 指向全局对象 Windows.
接着, 我们来看一下常见函数调用方式
2. 常见函数调用方式
直接调用:
- function fn (n) {
- ...
- }
- fn(n);
作为对象方法调用:
- var obj = {
- a: 1,
- fn: function (n) {
- ...
- }
- }
- obj.fn(n);
- call/apply
- function fn (n){
- ...
- }
- fn.call(context, n);
3. 变幻
观察 2 中的几种常见方式, 其实前几种都与最后一种密不可分. 原因是前两种都是第三种方式的简写(语法糖). 当然, 前两种方式也可以转变为第三种:
- fn(n) =>
- fn.call(undefined, n)
- obj.fn(n) => obj.fn.call(obj, n)
因此, 我们函数调用归根就是一种: fn.call(context, n)
4. 结论
可是我们总结以上, 跟 this 有什么关系呢? 其实答案已经呼之欲出了! context 就是 this 所指向! 当 context 为 null 或 undefined 时, 也可省略不写, 并且 this 指向 Windows. 那么这时我们再来看看, 就发现 this 指向很是明了了.
当转换为标准写法时, this 指向 context.
当 context 为 null 或 undefined 时, 也可省略不写, 并且 this 指向 Windows.
欢迎做客我的博客 LOMO 朱幸民
来源: http://www.jianshu.com/p/27fe7425e18a