JS 中的 this 代表的是当前行为执行的主体。JS 中的 context 代表的是当前行为执行的环境(作用域)。
this 指向和函数定义和执行环境都没有任何的关系,只与执行者(调用者)有关系。
如何判断 this 指向
- 函数执行,先看函数名前是否有”.”,如果有,this 的指向就是”.”前面的调用者,如果没有,this 的指向就是 window。
function fn() {
console.log(this)
}
var obj = {fn: fn}
fn() // this -> window
obj.fn() // this -> obj
function sum() {
fn();
}
sum() // this -> window,fn()前面没有调用者,所以是window,跟在哪执行没有关系
var oo = {
sum: function() {
fn();
}
}
oo.sum(); // this -> window,解释同上
- 自执行函数中的 this 永远是 window
- 给元素的某个事件绑定方法,当事件触发时,执行对应的方法,方法中的 this 指向当前的元素
// html
<div id="div1">点我</div>
// js
function fn() {
console.log(this)
}
// fn中的this指向的是#div1
document.getElementById("div1").onclick = fn;
练习题
var num = 20;
var obj = {
num: 30,
fn: (function (num) {
this.num *= 3;
num += 15;
var num = 45;
return function () {
this.num *= 4;
num += 20;
console.log(num);
}
})(num)
};
var fn = obj.fn;
fn();
obj.fn();