浅谈JavaScript中this的指向

Wardenclyffe 2020-03-25 原文

浅谈JavaScript中this的指向

浅谈JavaScript中this的指向

1.默认指向,this默认指向的是window对象

console.log(this);//打印的是window

2.函数调用时

2.1独立调用,this指向window对象
function test(){
    console.log(this);//打印的是window
}
window.test();//简写test()
2.2函数作为某个对象的方法时,this指向的是当前对象
let obj = {
     name:"test",
     show:function(){
     console.log(this);//这个打印出来的是window
	}
}
let a = obj.show;//a就是function(){console.log(this);}
a();//window.a();

3.指向当前对象

let obj = {
   name:'test',
   age:19,
   show:function(){
    console.log(this);
    }
}
obj.show();//打印出来的是Object

4.this指向绑定的元素,当函数作为一个事件处理函数的时候,这时this是指向绑定的元素

<body>
	<button>点击</button>
</body>
<script>
	document.querySelector("button").onclick=function(){
	console.log(this);
	}
</script>

5.改变this的指向

5.1 call()
let obj={
    name:'hello',
    age:19,
    show:function(x,y){
        console.log(this);//Object
        console.log(this.name);//张三
        console.log(this.age+x+y);//50
    }
}
let obj2={
    name:'张三',
    age:30
}
obj.show.call(obj2,10,10);
5.2 aplly()
let obj={
    name:'hello',
    age:19,
    show:function(x,y){
        console.log(this);//Object
        console.log(this.name);//张三
        console.log(this.age+x+y);//60
    }
}
let obj2={
    name:'张三',
    age:30
}
obj.show.apply(obj2,[10,20]);
es5中bind()
let obj={
    name:'hello',
    age:19,
    show:function(x,y){
        console.log(this);//Object
        console.log(this.name);//张三
        console.log(this.age+x+y);//60
    }
}
let obj2={
    name:'张三',
    age:30
}
let test = obj.show.bind(obj2);
test(10,20);

6.箭头函数的this的指向,它的this指向始终是指向的外层作用域

由于箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值
let obj = {
    name:"test",
    show:()=>{
        console.log(this);//打印出Window
    }
}
obj.show();
发表于
2020-03-25 13:41 
番茄_Morgan 
阅读(
评论(
编辑 
收藏

 

版权声明:本文为Wardenclyffe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Wardenclyffe/p/12565760.html

浅谈JavaScript中this的指向的更多相关文章

随机推荐

  1. Deep Learning基础–各个损失函数的总结与比较

    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值 […]...

  2. Asp.net Core 系列之–4.事务、日志及错误处理

    ChuanGoing 2019-11-17     这篇原本时想把事务处理、日志处理、错误处理、授权于鉴权一并 […]...

  3. Java小白集合源码的学习系列:ArrayList

    Java小白集合源码的学习系列:ArrayList 目录 ArrayList源码学习 ArrayList的继承 […]...

  4. SpringMVC+Spring+Mybatis整合

    SpringMVC+Spring+Mybatis整合 SpringMVC+Spring+Mybatis整合 m […]...

  5. 打印机共享

    连接本地已经设置好打印共享的电脑方法: 在运行里输入 \\连接打印机电脑的IP地址 进去安装好打印机的驱动,就 […]...

  6. 【并发】4、文件锁,多线程队列拷贝文件,并读取的操作

      最近有这样一个功能点,我实现了一个多线程的队列,生产线程ftp获取文件,然后扫描指定目录,获取文件基础信息 […]...

  7. 单播、广播和多播IP地址

    转自:http://www.cnblogs.com/gaoxing/archive/2012/02/19/23 […]...

  8. nova hypervisor接口添加host_ip字段

    云平台系统用户提出一个需求,要求根据物理机主机名或者IP查询其上虚拟机列表。根据主机名查询好办,nova的li […]...

展开目录

目录导航