a.函数创建时产生一个this.
function box(){alert(this)};//指向window
b.(谁调用指向谁)当有事件绑定,并执行了事件处理程序时,谁绑定的事件,事件处理程序中的this指向谁。
btn.onclick = function(){alert(this)};//绑定了事件,this事件的绑定者。
c.回调函数中的this指向window
setTimeout(function(){alert(this)});//任何地方使用定时器,里面的this都指向window
d.匿名函数可以使用bind()改变this的指向call()和apply()可以改变函数中的this指向
setTimeout(function(){alert(this)}.bind(btn));//使用bind()方法可以改变匿名函数this指向。
e.箭头函数本身没有this,它的this是继承父级而来。
btn.onclick = () => {alert(this)};//箭头函数的this指向父级执行环境,这里为window
f.箭头函数不能使用call()、apply() 和 bind()来改变this指向
setTimeout(()=>{alert(this)}.bind(this));//箭头函数无法用call()、apply() 和 bind()来改变this指向
g.严格模式下,全局函数的this是undefined;
“use strict”;
function box(){alert(this)};//严格模式下,this为undefined;
h:面向对象下的this
使用new 关键字创建一个实例对象,构造函数中的this指向了该实例对象,同时实例对象的this指向构造函数的原型对象。
function Box(name){
this.name = name;
}
Box.prototype.run = function(){this};
new Box(“tom”).run();//this指向Box.prototype。