1.函数模式
function test(){
console.log(this)
}
test();
此时,this指的是window全局对象
2.方法模式
var obj ={
test:function(){console.log(this)}
}
obj.test();
扫描二维码关注公众号,回复:
2233621 查看本文章
this指的就是调用这个方法的对象
3.构造函数模式
function Person(){
console.log(this)
}
var p = new Person();
this指的就是new 创建出来的新对象
4.上下文模式
上下文调用模式中,可以修改this的值,就是可以修改函数的调用方式
调用方式:call,apply
- apply
如:sayHello.apply(obj,[1,2])
- call
如:sayHello.call(obj,1,2)
注:api文档中‘[ ]’内的参数列表可有可无
call和apply的区别
1.第一个参数都是要把this修改成的对象
2.当函数需要参数的时候,apply是用数组进行传递
3.而call使用单个的参数进行传递
*call用于确定了函数的形参有多少个的时候使用
*apply多用于确定了函数的形参不确定的使用
*apply方法和call方法第一个参数为null的时候,都表示函数调用模式,也即是this指向window
*当apply和call方法第一个参数为值类型的时候,会将值类型转换为对应的对象(引用类型) 然后赋值给this
*当传入的第一个参数为null或者undefined的时候,会把this赋值为window