1、ES5中JS的函数有3种调用方式
(1)func(param1, param2)
(2)obj.child.method(param1, param2)
(3)func.call(context, param1, param2)
我们常用和常见的是前两种方式,但实际上前两种都可以转换成第三种,如:
func(param1, param2) ——> func.call(undefined, param1, param2)
obj.child.method(param1, param2) ——> obj.child.method.call(obj.child, param1, param2)
于是,this就是第三种情况中的context
2、实例
function func(){
console.log(this)
}
func()
等价于:
function func(){
console.log(this)
}
func.call(undefined) // window
解析:按理说this指向的就是undefined,但是浏览器有一条规则:如果你传的 context 就是 null 或者 undefined,那么 window 对象就是默认的 context(严格模式下默认 context 是 undefined),因此上面输出的是 window。
3、总结:
(1)this就是call一个函数时传入的context
(2)如果所给函数的调用形式不是call形式,可以按照1中的情况进行转换
网友评论