this、apply、call和bind

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

验证:app

//设置全局变量
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()的用法:

接着上面的代码:this

clipboard.png

局部变量不被销毁的缘由:

clipboard.png

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

clipboard.png

相关文章
相关标签/搜索