以函数形式调用时,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);