改变this:call、apply、bind
- bind和call、apply:call和apply函数立即执行;bind第二个参数为参数列表,返回函数
- call和apply:apply第二个参数为参数列表;call第二个参数为数组,函数执行
this指向
- this对象是在运行时基于函数的执行环境绑定的;
- 在全局环境中,this等于window;
- 定义对象时,this等于那个对象;
- 匿名函数的执行环境具有全局性,因此其this对象通常指向window
// 定义一个全局变量
var type = "全局";
// 定义函数aa
function aa () {
var type = '局部';
console.log(this.type);
}
aa(); // "全局"
// 定义对象bb
var bb = {
type: '局部',
getType: function () {
console.log(this.type)
}
};
bb.getType(); // “局部”
// 定义对象cc
var cc = {
type: '局部',
getType: function () {
return function () {
return this.type
}
}
};
cc.getType(); // “全局”(非严格模式下)
- 指向上一级对象
var cc = {
type: '局部',
getType: {
type: '局部内容',
getType: function () {
alert(this.type);
}
}
};
cc.getType.getType(); // "局部内容"
- 运行函数时,指向相应对象
function getType(){
console.log(this.cc);
}
var obj = {
cc:2,
foo: foo
}
obj.foo() // this挂载指向
参考:https://blog.csdn.net/qq_38824191/article/details/80480027