4

this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。
this的指向大致可以分为以下四种:
◎ 作为对象的方法调用
◎ 作为普通函数调用
◎ 构造器调用
◎ Function.prototype.call或Function.prototype.apply调用

丢失的this:

var obj={
myName:"sven",
getName:function(){
    return this.myName;
}
}
console.log(obj.getName());//输出:"sven"

var getName2 = obj.getName;
console.log(getName2());//输出:"undefined"

分析:

clipboard.png

验证:

//设置全局变量
var  myName = "Windows.name";
var obj={
myName:"sven",
getName:function(){
    return this.myName;
}
}
console.log(obj.getName());//输出:"sven"

var getName2 = obj.getName;
console.log(getName2());//输出:"Windows.name"

clipboard.png

apply和call方法的用法:

apply(obj,[argument1,argument2,….]) 接收两个参数:【参数1】一个对象,用于指定this的指向,默认不设置或者设置为null的情况下指向的是window。【参数2】传入参数的一个数组,参数个数是确定的。
call(obj,argument1,argument2,….) 接收不确定参数:【第一个参数】一个对象,用于指定this的指向,默认不设置或者设置为null的情况下指向的是window。【后面的参数】传入的参数,参数个数是不确定的。
代码验证:

clipboard.png

bind()的用法:

接着上面的代码:

clipboard.png

局部变量不被销毁的原因:

clipboard.png

利用闭包实现局部变量不被销毁:

clipboard.png


huanglw
128 声望9 粉丝

前端工程师