首先,this要在执行时才能确认值,定义时没法确认.而在es6的箭头函数中,this则是在定义时所在的对象html
this对象有四种使用的场景:es6
第一种状况: 全局下this app
因为全局下的变量是window的属性,函数是window的方法函数
因此this
栗子:spa
function fn1 (){prototype
return thishtm
}对象
console.log(fn1()) //windowblog
注意: 在严格模式下 “use strict” this是undefined
第二种状况:构造函数
(1).当函数做为构造函数调用时,this表明new出来的对象;
(2).若是没有使用new而是直接调用函数,this===window;
(3).不单单是构造函数的prototype,即使是在整个原型链中,this表明的也是当前对象的值;
栗子:
function Foo (name){
this.name = name ;
console.log(this)
}
var foo = new Foo('Emma'); //Foo {name: "Emma"}
Foo() //window
第三种状况:函数做为对象的一个属性
这里有两种状况
(1).函数做为对象的一个属性被调用的时候,this指向的是该对象;
(2).函数做为对象的一个属性被赋值到另外一个变量中调用,this===window
栗子:
var obj = {
x :10,
fn:function(){
console.log(this)
}
}
obj.fn() //当前对象
var newFn = obj.fn; newFn() //window
第四种状况: 函数用apply() call() bind()调用时,this取得是传入的对象
他们的具体使用方法及不一样点单独总结了