this指向,箭头函数的this指向,改变this指向
this指向
this的最终指向是那个调用它的对象;
本质:this最终指向的是一个对象,this是一个指针。
普通函数的this指向window
function a() {
console.log(this);
}
a();
构造函数调用,this指向实例化的对象
function Person(name, age) {
this.name = name;
this.age = age;
console.log(this);
}
var p1 = new Person('sp', 18);
var p2 = new Person('sx', 19);
对象方法调用,this指向调用方法的对象
var obj = {
fn: function() {
console.log(this)
}
}
obj.fn();
事件绑定方法,this指向的是事件绑定的对象
<button id="btn">hh</button>定时器函数,this指向的是window
setInterval(function() {
console.log(this);
}, 1000);
箭头函数的this指向
指向箭头函数定义时所处的对象,而不是箭头函数使用时所在的对象,默认使用父级的this
具体事例待更新。。。。。。
更改this指向
call(),apply(),bind()
call()方法调用一个对象,但可以改变this指向;
fun.call(thisArg, arg1, arg2)
var Person = {
name: 'sp',
age: 18
}
function fn(x, y) {
console.log(x + ',' + y);
console.log(this);
console.log(this.name);
console.log(this.age);
}
fn.call(Person, 'yy', 20);
apply()方法可以改变函数this指向;
fun.apply(thisArg, [args])
bind()方法不会调用函数,能改变内部this;
fun.bind(thisArg, arg1, arg2)
bind新建了一个函数,称为绑定函数,与被调用函数具有相同的函数体,当调用函数时this值绑定到bind()的第一个参数上。
call(),apply(),bind()总结:
不同:
call,apply会直接调用函数,bind不会调用函数;
call,apply传递的参数不一样,call为参数arg1,arg2,apply为数组[args];
应用:
call做继承;
apply和数组有关;
bind可不调用函数且可以改变this指向。