this
- this是js中的一个重要的关键字
+ this 也是执行上下文(context)
- this中的值是什么?
+ 也是我们常说的this 的指向是什么
this的指向
- 全局中的this
// 全局的this
console.log(this) // window
console.log( top ) // window
+ 全局中的this执行window
- 函数中(局部作用域)的this
+ 函数中的this指向和定义函数的位置无关,和调用函数的方式有关
1. 普通调用方式 函数中的this--->window
- 函数()
// 普通调用
var o = {fn:function(){console.log( this )}}
var f = o.fn; // f中的地址 是o.fn对应函数的地址
f(); // this--->window
2. 定时器调用方式 函数中的this---->window
- setInterval(函数,时间)
- setTimeout(函数,时间)
// 定时器调用
var o = {fn:function(){console.log( this )}}
setTimeout(o.fn,10)
setInterval(o.fn,1000)
3. 立即执行函数方式 函数中的this--->window
- 立即执行函数: 函数会立马执行
+ ;(函数)()
+ !(函数)()
+ ~(函数)()
// 立即执行函数
;(function (a) {
console.log(this)
console.log(1)
})(1)
4. 事件调用方式 函数中的this---->事件源
// 事件调用函数
document.onclick = function () {
console.log( this )
}
var o = {fn:function(){console.log( this )}}
document.onclick = o.fn;
document.addEventListener('click',o.fn)
5. 对象调用方式 函数中的this---->调用的对象
- 对象.属性名()
- 对象['属性名']()
- 数组[索引]() // this指向调用的数组
// 对象调用
var obj= {a:1,fn:function(){
// console.log( this )
// console.log( this.a )
return this
}}
console.log( obj == obj.fn() ) // true
var f = function () {console.log( this )}
var o = {};
o.fn = f;// 给o对象添加一个fn属性 执行f的函数
// o.fn()
o['fn']()