1、dom0中,谁调用了函数,this就是谁
<body>
<button>点我</button>
<script>
document.querySelector('button').onclick = function () {
console.log(this);//button
}
</script>
</body>
2、 html事件中,指向window对象
<body>
<button onclick="dianjishijian()">点我</button>
<script>
function dianjishijian() {
console.log(this);//没有调用对象,默认是window
}
</script>
</body>
3、 dom2事件里:
(1)非IE下,谁调用指向谁
<body>
<button>点我</button>
<script>
var btn = document.querySelector('button');
btn.addEventListenner('click',function(){
console.log('this');//btn
}
</script>
</body>
(2) IE下,指向window
代码同上
4、 间隔调用和延迟调用,指向window
5、 闭包,指向window
6、call & apply ,第一个参数是谁,this就是谁
call : 函数.call( 函数实际的调用者,函数参数1,函数参数2,...)
apply: 函数.apply(函数实际的调用者,[函数参数1,函数参数2,...])
7、 自执行函数,指向window
(function () {
console.log(this);//指向window
}()//小括号表示你要调用这个函数
);//大括号表示表示你要执行这个调用
8、 构造函数:指向new命令新建的对象
function 类名(对象属性值1,对象属性值2,...){
this.对象属性1 = 对象属性值1;
this.对象属性2 = 对象属性值2;
...
}
var objectName = new 类名(实际属性值1,实际属性值2,....)