• 关于js中的this关键字


    最近在学习js,看了关于this关键字,感觉水有点深,所以在网上查了很多的关于this关键字的解释说明,在此处总结一下:

    1.普通函数中的this关键字,因为普通函数的拥有者是window对象,所以此处的this代表window对象,如下例:

    1 var test = function(){
    2             this.name = "john"
    3         }
    4         test();
    5         alert(window.name);

    解释:因为普通函数的拥有者是window对象,所以此处的this代指window,执行此段代码,将弹出john。

    2.对象中的函数中的this,因为对象拥有这个函数,所以这里的this代表该对象,如下例:

    1 var obj = {
    2             name: "Smith",
    3             sayHi: function(){
    4                         alert(this.name);
    5                     }
    6         };
    7         obj.sayHi();

    此段代码执行,将弹出Smith。

    3. 对象中一个函数嵌套的问题,如下代码示例:

     1 var obj = {
     2             name: "Smith",
     3             sayHi: function(){
     4                         setTimeout(
     5                                 function(){
     6                                     alert(this.name);
     7                                 },
     8                                 2000);
     9                         }
    10         };
    11         obj.sayHi();

    在示例代码中,此处却不能再弹出Smith,原因何在呢,根据我的理解,虽然sayHi函数属于obj对象,但是当调用obj对象的sayHi方法后,此函数又调用了setTimeout函数,而该函数有调用了一个匿名函数,前面已经说过,每个函数均属于window对象,所以此次setTimeout对象调用的这个匿名函数中的this代指window对象,而window对象不存在name这个属性,故不能弹出Smith

    总结:在函数中使用this时,关键在于找到这个函数的拥有者,找到这个函数的拥有者即可马上了解函数中的this关键字的含义,同时也需明白函数是在被拷贝(copy)还是在调用这个函数(call)。

    在dom模型下关于this的举例,我就不再赘述了,网上有很多资料,其实原理就一句话----this关键字用于引用当前对象。

    人生最可贵的事情是sb似的坚持于追求……
  • 相关阅读:
    Django REST framework
    Docker学习11-sonarqube+jenkins持续集成代码审计(下)
    Docker学习10-sonarqube+jenkins持续集成代码审计(上)
    jmeter-4-linux下环境搭建 jmeter+ant+docker-jenkins,持续集成测试完成
    jmeter-3-linux下环境搭建jmeter+ant
    jmeter-2-ant+jenkins持续集成测试
    jmeter-1-apache ant-集成测试
    python-50-pip加速与pip包虚拟环境管理
    git-基本操作
    创建 PHP Composer 包并使用的操作指南
  • 原文地址:https://www.cnblogs.com/binger/p/2590158.html
Copyright © 2020-2023  润新知