zoukankan      html  css  js  c++  java
  • JS this对象

    this对象是在运行时基于函数的执行环境绑定的:

      1、在全局函数中,this等于window。

      2、当函数作为某个对象的方法调用时,this等于这个对象。

      3、this和执行环境有关,和声明环境无关。

         例子1:

    var someone = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    var other = {
        name: "Tom",
        showName: someone.showName
    }
    
    other.showName();  //Tom

          例子2:

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

    setTimeout、setInterval和匿名函数中的this

    在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象是全局对象window,这条我们可以看成是上一条的一个特殊情况。

      例子1

    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

      例子2

    var name = "Bob";  
    var nameObj ={  
        name : "Tom",  
        showName : function(){  
            alert(this.name);  
        },  
        waitShowName : function(){  
            setTimeout(this.showName, 1000);  
        }  
    };  
    
    nameObj.waitShowName();

    构造函数中的this

    // 构造函数:
    function myFunction(arg1, arg2) {
        this.firstName = arg1;
        this.lastName  = arg2;
    }
    
    // This creates a new object
    var x = new myFunction("John","Doe");
    x.firstName;                             // 返回 "John"

     这里构造函数是创建对象的过程,故构造函数中 this 关键字没有任何的值。this 的值在函数调用时实例化对象(new object)时创建。

    this指向建立的新对象。


    思考题

    下面这些例子的输出结果是?

      例1:

    var name = "Bob";  
    var nameObj ={  
        name : "Tom",  
        showName : function(){  
            alert(this.name);  
        },  
        waitShowName : function(){
            var that = this;
            setTimeout("that.showName();", 1000);
        }
    }; 
     
    nameObj.waitShowName();

    参考:

    http://www.cnblogs.com/justany/archive/2012/11/01/the_keyword_this_in_javascript.html (推荐)

    http://www.jb51.net/article/55470.htm

  • 相关阅读:
    两种常用的jquery事件加载的方法 的区别
    .net修炼笔记
    C#获取MySql 数据常用的代码
    sql时间格式化
    UMEditor(Ueditor mini)修改图片上传路径
    LeetCode_101. Symmetric Tree
    LeetCode_100. Same Tree
    LeetCode_88. Merge Sorted Array
    LeetCode_83. Remove Duplicates from Sorted List
    LeetCode_70. Climbing Stairs
  • 原文地址:https://www.cnblogs.com/hemi/p/4285101.html
Copyright © 2011-2022 走看看