JS中this的指向问题
在全局环境下this就是windows对象的引用,比如说我们在全局环境下定义一个函数,看如下代码
function better() {
console.log(this);
}
better()
调用函数打印出来的就是window对象,
构造函数主要用来生成对象,里面的this默认就是指当前对象,当一个函数为一个对象的属性时,此时函数中的this指向也是指向这个对象
function Dage(params) {
this.name = '张三'
this.age = 18
this.page = params
this.num = function () {
console.log(this);
}
}
let demo = new Dage()
demo.num()
此时打印出的结果就是dage对象
另外,箭头函数没有this, 也可以理解为箭头函数中的this 会继承定义函数时的上下文,可以理解为和外层函数指向同一个this。如果想使用函数定义时的上下文中的this,那就使用箭头函数
var name = 'lisi';
var obj = {
name: 'zhangsan',
getName: function () {
return () => {
return this.name;
}
}
}
console.log(obj.getName()()); //返回的为zhangsan
改变this指针,也可以理解为对象借用方法,我们用到的改变this指向的方法有apply,call,bind,apply和call的传参第一个参数都为this的新指向,后面的参数为函数要传的参数,两者的区别在于apply的参数一定要是数组,且apply和call在调用以后函数会立即执行,而bind方法的传参也是第一个参数为this的新指向,不过函数并不会立刻执行,而是需要再次调用