关于js中的this问题

105 阅读2分钟

关于this指向借用参考别人的图

image.png

从图我们可以看出this的指向大概分为以下的几个部分 那我们来举例子

1、作为对象的属性被调用时会怎么样

var dog = { name:'小黑', age:12, getAll:function(){ console.log('打印此时this ',this) console.log(this.age) } } dog.getAll()

运行此刻代码,我们可以清楚的看出此时this指向的是我们的对象,如果我们的this再对象属性中被调用,this就是我们的对象

2、作为普通函数 我们直接打印this 全局打印

image.png

我们可以清楚的看出this的指向是全局的,作为普通函数,我们可以直接调用刚才建立的对象

image.png

作为普通函数this的指向,就是我们的全局也即是window 如果是ES5的严格模式下,this==undefined

3、构造器调用

当new 调用构造函数时,返回的是一个对象,所以此时的this指代的就是这个对象,我们可以通过操作this从而操作这个对象添加属性、值

4、被call、apply调用时 当被call调用时

var c = { name:'上海', CDP:1.2, num:function(a,b){ console.log('第一个函数') if(b){ console.log(b) } return a+this.name } } var x = { name:1 } console.log(c.num(1)) console.log(c.num.call(x,2,1111))

此刻this被替换成x中的对象,所以call会改变this的走向,call第一个参数为选中的对象,第二个都是参数,可以有多个参数

apply,第一个参数为选中对象,第二个是个数组,数组里面可以放多个参数这个数组的数据选中方法里面的参数想对应

image.png

5、关于箭头函数this的指向

var val = '小黑哦' var dog = { name:'小红', num:()=>{ console.log('此刻this',this.val) } } dog.num()

当我们用的是箭头函数时。此时我们箭头函数里面的this指代的是全局this==window

参考blog.csdn.net/jbj6568839z…