普通函数调用
包括函数声明、匿名函数、函数表达式等调用,this指向window。
function getSum() {
console.log(this) //window
}
getSum()
(function() {
console.log(this) //window
})()
var getSum=function() {
console.log(this) //window
}
getSum()
对象方法调用
对象方法里的this指向对象
var objList = {
name: 'methods',
getSum: function() {
console.log(this) //objList对象
}
}
objList.getSum()
new 构造器函数调用
new 构造函数名(),this指向构造函数
function Person() {
console.log(this); //指向构造函数Person
}
var personOne = new Person();
- 箭头函数不可以当作构造函数使用,也就是不能用new命令实例化一个对象,否则会抛出一个错误。
- 箭头函数中的this是在定义函数的时候绑定继承自父执行上下文中的this。
call和apply、bind间接调用
利用call和apply来实现,this就是call和apply对应的第一个参数,如果不传值或者第一个值为null,undefined时this指向window。
function foo() {
console.log(this);
}
foo.apply('我是apply改变的this值');//我是apply改变的this值
foo.call('我是call改变的this值');//我是call改变的this值
- 都是改变this指向,都可接收参数。
- bind和call是接收单个参数,apply是接收数组。