zoukankan      html  css  js  c++  java
  • 关于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似的坚持于追求……
  • 相关阅读:
    在java中怎样获得当前日期时间
    java 常见异常
    线程中的current thread not owner异常错误
    hibernate 关于hbm.xml编写的总结
    java web 常见异常及解决办法
    初用Ajax
    JavaScript动态修改html组件form的action属性
    Ajax中文乱码的解决
    No repository found error in Installing ADT
    eclipse 安装 CDT
  • 原文地址:https://www.cnblogs.com/binger/p/2590158.html
Copyright © 2011-2022 走看看