关于this对象
this对象是在运行时基于函数的执行环境绑定的:在全局环境中,this等于windown,而当函数被某个对象调用时,this等于那个对象
每个函数都有自己的执行环境,全局执行是最外围的一个执行环境。this指向就是当前代码所在的执行环境
改变this执行的几种方法以及之间的区别:
apply()和call()
有两个参数,第一个参数是绑定给this的值,call()第二个参数是一个参数列表,apply()第二个参数是参数是一个参数数组,当第一个参数是null或undefind,this指向windows
每个函数都包含两个非继承而来的方法:apply()和call(),他们两个都是用来在特定的作用域中调用函数,然后可以设置调用函数的this指向。
apply()和call() 可以通过传入作用域来扩充函数赖以运行的作用域。通过传入的作用域不同,来改变函数的this指向
bind()
这个方法会创建以恶搞函数的实例,其this值会被绑定传入**bind()**的值
例如:
var name = "名字";
var person = {name: "小明"};
function sayHello () {
console.log(this.name + ': hello')
}
var personSay = sayHello.bind(person);
personSay(); // 小明:hello
上面例子通过bind将sayHello的实例赋给了personSay,同时将this指向了person对象,所以此时即使是在全局作用域中调用这个函数,也会看到sayHello实例上的this.name指向的是blue;