zoukankan      html  css  js  c++  java
  • Javascript中this关键字

    一般而言,在Javascript中,this指向函数执行时的当前对象。

     1 var name = "Bob";  
     2 var nameObj ={  
     3     name : "Tom",  
     4     showName : function(){  
     5         alert(this.name);  
     6     },  
     7     waitShowName : function(){  
     8         setTimeout(this.showName, 1000);  
     9     }  
    10 };  
    11 
    12 nameObj.waitShowName();
    值得注意,该关键字在Javascript中和执行环境,而非声明环境有关:
    复制代码
    var someone = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    var other = {
        name: "Tom",
        showName: someone.showName
    }
    
    other.showName();  //Tom
    复制代码

    this关键字虽然是在someone.showName中声明的,但运行的时候是other.showName,所以this指向other.showName函数的当前对象,即other,故最后alert出来的是other.name。

    没有明确的当前对象时

    当没有明确的执行时的当前对象时,this指向全局对象window。

    By default, this refers to the global object.

    为什么说是全局对象(the global object),因为非浏览器情况下(例如:nodejs)中全局变量并非window对象,而就是叫“全局变量”(the global object)。不过由于我们这片文章主要讨论的是前端开发知识,所以nodejs就被我们忽略了。

    例如对于全局变量引用的函数上我们有:

    复制代码
    var name = "Tom";
    
    var Bob = {
        name: "Bob",
        show: function(){
            alert(this.name);
        }
    }
    
    var show = Bob.show;
    show();  //Tom
    复制代码

    你可能也能理解成show是window对象下的方法,所以执行时的当前对象时window。但局部变量引用的函数上,却无法这么解释:

    复制代码
    var name = "window";
    
    var Bob = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    var Tom = {
        name: "Tom",
        showName: function(){
            var fun = Bob.showName;
            fun();
        }
    };
    
    Tom.showName();  //window

     

     
  • 相关阅读:
    几种常用的正则
    手机中间4位为*的方法
    关于在Vue中,只要单个列表显示模态框的做法。
    KMP算法
    排序算法的实现
    设计模式之单例模式
    慕课网--》从零做一个前端开源项目笔记
    Ubuntu安装sublime Text 3并配置可以输入中文
    ubuntu使用git时,终端不显示git分支。
    ubuntu使用git的时:Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
  • 原文地址:https://www.cnblogs.com/CooderIsCool/p/4736373.html
Copyright © 2011-2022 走看看