js this指向问题详解

29 篇文章 0 订阅
22 篇文章 0 订阅

以函数形式调用时,this 永远都是 window

function aa(){
	console.log(this)
}
aa();// 指向全局对象window

以方法的形式调用时,如person.getname,this 是调用方法的对象,即对象本身
对于vue,里面的this默认指向vue的实例

const vm =new Vue({
       el:"#root",
       data:{},
       methods:{
           showInfo(event){
               console.log("this是啥")
               console.log(this)//此处的this指的是vm
           },
       }
   })

通过构造函数创建实例对象的时候,this永远指向创建的实例对象

//相当于创建了一个Person类
	function Person(name,age,gender){
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	var per = new Person("zy",18,"女");//加new就是构造函数,不加new就是普通函数
	console.log(per);

严格模式下,普通函数this指向为undefined
箭头函数:箭头函数没有this,如果非说有this的话,那么它的this指向所在作用域的this

同时若是你在对象里面(比如说vue),调用一些window函数的话,那样this指针就又指向window了,比如说常见的异步,排序之类的,如下

this.personList=this.personLists.filter(function(){  
//filter过滤的意思,这个是过滤函数,将每一项符合结果的值返回到personList                        
   return p.name.indexOf(val)!==-1
})

若是你不想要这个对象的this指针指向值哪有什么办法呢?比如说在vue里面,你用了一个异步操作,你想要的是将异步的值返回给vue里面的data的一个值,但是this指向window,你不能在异步操作里面这样子操作

bb="读取的值"
this.aa=bb;//这样子没办法读取到,因为this指向的是window,不是vue,所以没办法给data的aa赋值

答案有两个
一个是在外部保存这个this的指向

let that=this;//在window里面调用aa来代表外部的this指向,例如 that.aa=bb

第二个就是用箭头符号表示,箭头符号表示的意思可以简单的说是这个函数里面的this指向的值是是外面的this,你要找就往外面找

setTimeout(() => {//这个就是箭头函数
            let data='订单型型数据';
            console.log(222);
            iterator.next(data);
        }, 2000);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值