浮云吹作雪,世味煮成茶。
this 关键字
- 面向对象语言中 this 表示当前对象的一个引用。
- 但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
this 使用
- 对象方法中的 this
- 在方法中,this 表示该方法所属的对象。
1 | var obj = { |
- 单独使用的 this
- 如果单独使用,this 表示全局对象。
1 | console.log(this); // Window.Object |
- 函数中使用的 this
- 在函数中,this 表示全局对象。
1 | function fn() { |
- 作为构造函数调用
- new 关键字会创建一个空的对象,然后会自动调用一个函数 apply 方法,将 this 指向这个空对象,这样的话函数内部的 this 就会被这个空的对象替代。
1 | function f() { |
- 在函数中,在严格模式下使用 this
- this 是未定义的(undefined)
1 | ; |
- 在事件中使用 this
- this 表示接收事件的元素。
1 | <button onclick="this.style.display='none'">点我后我就消失了</button> |
this 理解
- this 的对象是运行时基于函数的执行环境绑定的,它的指向完全取决于函数的调用方式
1 | var name = 'The Window'; |
1 | var name = 'The Window'; |
- 理解
- 第 1 个例子里是在全局环境中调用了这个函数,所以 this 关键字最终指向了全局对象 The Window,从而利用闭包在全局环境中调用了 The Window;
- 第 2 个例子不同,它返回的是 that 的 name,而 this 对象被赋值给了 that 变量,就是说 this 对象和 that 捆绑在了一起,那么在调用这个方法时相当于在 object 里利用闭包去寻找最终变量(that 是引用着 object 的),所以只能找到 My Object 变量。
this 重定义
- call()、apply()、bind() 都是用来重定义 this 这个对象的
1 | var people = { name: '小王', age: '23' }; |
- 传参
1 | var people = { name: '小王', age: '23' }; |