急,请问javascript的this对象问题?<body onload="alert(this.location)"><input type=button value=确定 onclick="alert(this.nodeName)">
上面这两行代码:onload触发的是window对象,那么this.location可以认为是window.locationonclick触发的是什么对象,那么这里的this.nodeName可以认为是什么对象的nodeName属性啊?要怎么写出来?第二:
<input type=button value=确定 onclick="alert(this.nodeName)">这个onclick触发的是document的任意html对象,那么我就认为是触发document的html对象,那么可以把this.nodeName写成document.nodeName,为什么显示出来的是#document而不是input,请指教!

解决方案 »

  1.   

    <input type=button value=确定 onclick="alert(this.nodeName)"> 
    这个this指向的是input,也就是当前节点对象。
    从网上资料来看<body onload="alert(this.location)">等于window.onload,
    所以body 中的事件比较特殊,this指向的是window。
      

  2.   


    javascript 中this 的用法:
    1.<div onclick="// 可以在里面使用this">division element</div> this 指向div
    2.    <div id="elmtDiv">division element</div>
           <script language="javascript">
            var div = document.getElementById('elmtDiv');
            div.attachEvent('onclick', EventHandler);  //attachEvent把div的onclick事件和一个方法绑定 
             function EventHandler()
             {
             // 在此使用this
              }
            </script>在此this 指向window对象,若要引用div对象this.event.srcElement;
    3、用DHTML方式在事件处理函数中使用this关键字:
    <div id="elmtDiv">division element</div>
     <script language="javascript">
     var div = document.getElementById('elmtDiv');
     div.onclick = function()
     {
        // 在此使用this
     };
     </script>产生的方法同上,但此处的this 指向div
    4、类定义中使用this关键字:
    function JSClass()
      {
          var myName = 'jsclass';
          this.m_Name = 'JSClass';
      } 
      JSClass.prototype.ToString = function()
      {
          alert(myName + ', ' + this.m_Name);
      };
      var jc = new JSClass();
      jc.ToString();//这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。
    5、为脚本引擎内部对象添加原形方法中的this关键字:
    Function.prototype.GetName = function()
      {
          var fnName = this.toString(); 
          fnName = fnName.substr(0, fnName.indexOf('(')); 
          fnName = fnName.replace(/^function/, ''); 
          return fnName.replace(/(^\s+)|(\s+$)/g, '');
      }
      function foo(){}
      alert(foo.GetName());    //这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。