this的简介
this作为javascript中的关键字,但是在不同情况下,所指的对象也是不一样的。下面是介绍不同情况下this的使用。
1.在事件处理函数中的this
<div id="btn">
我是按钮
</div>
<script>
var btn = document.getElementById('btn');
//this 在事件处理函数中,哪个元素触发事件,指向谁
btn.onclick = function(){
console.log('点击了');
console.log(this);
}
</script>
效果如图:
2.在构造函数中的this
//构造函数中this指向创建的对象
function person(){
console.log(this);
this.name = arguments[0];
}
var a = new person('sd');
效果运行:
3.在对象中的this
var obj = {
name : 'sdad',
say : function(){
console.log(this.name,'2222');//这边用什么调用,this指向的就是哪个对象,
}
}
obj.say() //this指的是obj
运行如下:
下面的这个例子使用闭包来写的,可以看一下。
var name = 'sd';
var obj = {
name : 'sdad',
say : function(){
console.log(this.name,'2222');//sdad 2222
return function(){
console.log(this.name);//sd
}
}
}
var say1 = obj.say();
say1();
运行结果:
4.在普通函数中的this
// 函数中的this
var name = 'sd';
function say(){
console.log(this.name,'111'); //this 指的是window对象,所以输出sd
}
say();
运行结果:
总结(自己的理解)
一般的步骤为:1.看是否在全局或者函数中:在window调用函数中用this,指向this
2.在函数看是否为箭头函数,箭头函数找上层作用域中的this,指向谁那么箭头函数中this就指向谁。3.事件处理函数,哪个触发事件就是指向哪个。4.构造函数中this指向创建的对象。总的来说是谁调用,this就指向谁,但得分情况看。