this是JavaScript语言中的一个关键字,表示函数在调用时所在的对象。this的指向是在函数被调用时确定的,而不是在函数被创建时确定的。由于JavaScript中的函数可以在不同的对象上下文中被调用,因此this的指向具有动态性。
当函数不作为对象的属性,或使用call、apply方法调用时,this指向全局对象window。
function foo(){
console.log(this);
}
foo(); // window
当函数作为对象的属性被调用时,this指向该对象。
var obj = {
name: 'Jack',
sayName: function(){
console.log(this.name);
}
}
obj.sayName(); // Jack
当函数用new关键字调用时,this指向新创建的对象。
function Person(name){
this.name = name;
}
var p = new Person('Tom');
console.log(p.name); // Tom
当函数作为事件处理函数被调用时,this指向触发该事件的元素。
var btn = document.getElementById('btn');
btn.onclick = function(){
console.log(this.id);
}
两者作用相同,区别在于传入参数的方式不同,call方法是一一列举参数,apply方法是将参数作为数组传入。
function fn(){
console.log(this);
}
var obj = {name:'Jack'};
fn.call(obj); // obj
bind方法返回一个新函数,将原函数中的this绑定到指定的对象上,并返回这个新函数。
function fn(){
console.log(this);
}
var obj = {name:'Jack'};
var newFn = fn.bind(obj);
newFn(); // obj
this的指向具有动态性,需要根据具体调用方式来确定其指向。在需要改变this指向时,可以使用call、apply、bind方法。
本文链接:http://task.lmcjl.com/news/8228.html