按照优先级的有先后顺序判断this的指向:
1.函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象.
var bar = new fun()
2.函数是否用过call\apply(显式绑定)或者硬绑定(bind)调用?如果是的话,this绑定的是指定的对象.
var bar = fun.call(obj)
3.函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象.
var bar = obj.foo()
4.如果都不是的话,使用默认绑定.如果在严格模式下,就绑定到undefined,否则绑定到全局对象.
var bar = foo()
-------------------------------我是分割线----------------------------------
var foo = {
func1: function (bar){
bar();//输出window, 而不是foo
console.log(this);// 这里的this关键字是foo对象的一个引用}
}
foo.func1(function(){console.log(this)})
当this值的宿主函数被封装在另一个函数的内部或在另一个函数的上下文中被调用时,this值将永远是对head对象的引用(this在ES5中是固定的).
网友评论