zoukankan      html  css  js  c++  java
  • js中的this

      js中this出现的频率是很高的,有时候会弄不清楚this到底指的是谁,所以这里对this做一个更详细的了解。

      一般情况下,this变量所引用的对象是判断所在函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象,即谁调用则指谁。

    var obj={};

    obj.x=100;

    obj.y=function(){alert(this.x);};

    obj.y();//弹出100

    这里的obj.y(),函数是作为obj对象的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。

     var checkThis=function(){

    alert(this.x);

    };

    var x="this is a property of window";

    var obj={};

    obj.x=100;

    obj.y=function(){alert(this.x);};

    var obj2=obj.y;

    obj.y();//弹出100

    checkThis();//弹出'this is a property of window'

    obj2();//弹出'this is a property of window'

    obj.y()中调用函数的对象是obj对象,checkThis()中调用函数的对象是window对象。obj2()中调用函数的对象是window对象。在js的变量作用于中,规定"全局变量都是window对象的属性"。在obj2()中,可以写成 var obj2=function(){alert(this.x)},与checkThis的定义是一样的。

    this.x和apply()、call()

    通过call和apply可以重新定义函数的执行环境,即this的指向。

    call()

    function changeStyle(type,value){

      this.style[type]=value;

    }

    var one=document.getElementById('one');

    changeStyle.call(one,'fontSize','100px');//正确

    changeStyle('fontSize','300px');//出现错误,此时changeStyle中this引用的是window对象,但window对象并没有style属性。

    apply()

    function changeStyle(type,value){

      this.style[tyjjpe]=value;

    }

    var one=document.getElementById('one');

    changeStyle.apply(one,['fontSize','100px']);//正确

    changeStyle('fontSize','300px');//出现错误,同上。

    有时候this是没有意义的,如:

    var obj={

      x:100,

      y:function(){

        setTimeout(function(){alert(this.x);},2000);//在这里,调用setTimeout的是window对象,因此,this指向的是window,会弹出undefine。

    }

    };

    obj.y();

    var obj={

      x:100;

      y:function(){

       var that=this;

       setTimeout(function(){alert(that.x);},2000);//此时that指向的是obj对象。弹出正确。

     }

    };

    obj.y();  //弹出100

    在事件监听中使用this

    var one=document.getElementById('one');

    one.onclick=function(){

      alert(this.innerHTML); //this指向的是one元素

    };

    总结:this指向的是包含this指针的上层对象。

    普通函数,全局变量情况下:全局对象window

    对象的方法:该对象

    构造函数:新构造的对象

    博文参考:http://www.108js.com/article/article1/10006.html?id=18

  • 相关阅读:
    101. Symmetric Tree
    mfc实现对话框全屏置顶显示
    qq截图原理
    给对话框添加颜色
    mfc设置半透明对话框
    API介绍
    列表控件学习1
    VC++、MFC
    vs2010 产品密钥
    VS2008 视图资源.rc无法加载的问题及解决方法
  • 原文地址:https://www.cnblogs.com/lionisnotkitty/p/6296851.html
Copyright © 2011-2022 走看看