this对象

纸飞机 发表于 2021/10/18 23:26:02 2021/10/18
【摘要】 这里主要说的是函数内的this。 this是在函数调用时创建的执行上下文中自 动生成的一个内部属性,它会绑定(指向)一 个对象。但是函数在不同的调用方式下其 内部this会绑定不同的对象。各绑定规则如下: 一、普通函数 普通函数(无论全局还是局部)直接调用,其 this指向全局对象window。 //全局函数function A(...

这里主要说的是函数内的this。 this是在函数调用时创建的执行上下文中自 动生成的一个内部属性,它会绑定(指向)一 个对象。但是函数在不同的调用方式下其 内部this会绑定不同的对象。各绑定规则如下:

一、普通函数

普通函数(无论全局还是局部)直接调用,其 this指向全局对象window


  
  1. //全局函数
  2. function A() {
  3. console.log(this)
  4. )
  5. A(); //Window
  6. --------------
  7. //局部函数
  8. function aa() {
  9. function bb() {
  10. console.log(this);//Window
  11. }
  12. bb()
  13. }
  14. aa();

二、立即执行函数

立即执行函数中的this指向全局对象 window


  
  1. (function() {
  2. console.log(this); //Window
  3. })();

三、对象里的方法

当一个方法被调用时,this指向调用该方法的对象


  
  1. var obj = {
  2. sayName: function() {
  3. console.log(this);
  4. }
  5. }
  6. obj.sayName(); //obj

四、构造函数

this指向新创建的实例对象。


  
  1. function Obj() {
  2. this.name = 'xiao'; //Obj作为构造函数被调用,函数体内的this被绑定为新创建的对象person。
  3. }
  4. var person = new Obj();
  5. console.log(person.name); //xiao

五、调用call/apply/bind的函数

作用是改变函数的调用对象,即改变函数 this的指向,指向第一个参数对象


  
  1. var d = {
  2. getThis: function(){
  3. console.log(this)
  4. }
  5. }
  6. var e = {
  7. name: 'xiao'
  8. }
  9. d.getThis.call(e) //e

六、箭头函数

ECMA262规范中表明箭头函数不会生成执行上下文,也就没有自己的this。所以它的 this是词法,按词法解析this,即在定义时就已经和外层执行上下文的this绑定了。箭头函数的this始终等于外层上下文的this, 外层this指向谁,箭头函数this就指向谁。


  
  1. var f = {
  2. getThis:()=>{
  3. console.log(this)
  4. }
  5. }
  6. f.getThis(); //Window '箭头函数中的this等于其外层中的this,即全局环境中的this,等于window
  7. ---------------
  8. var objl = {
  9. age: 1,
  10. say: function() {
  11. setTimeout(() => {
  12. console.log(this,this.age); //obj1 1
  13. //此处this等于其外层函数say中的this,指向调用say的obj1'
  14. },0);
  15. }
  16. };
  17. obj1.say()

七、事件绑定函数

事件绑定里的this指向调用该函数的dom 对象


  
  1. var btn = document.querySelector('.btn');
  2. btn.onclick = function() {
  3. console.log(this); // btn 对象
  4. }

八、定时器函数

定时器函数里的this指向的是window


  
  1. setTimeout(function() {
  2. console.log(this);//window
  3. ),1000);

文章来源: root181.blog.csdn.net,作者:前端纸飞机,版权归原作者所有,如需转载,请联系作者。

原文链接:root181.blog.csdn.net/article/details/119851102

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。