比如有一个function:
<script language="JavaScript" type="text/javascript">function imenus_data0(){
  this.menu_showhide_delay = 800
  this.show_subs_onclick = false
  this.hide_focus_box = false
……下面的就不拷贝了这个函数中的this 指代谁呢?我以为是指代windows呢,可是好象不是,指代document好象也不是?
难道是谁调用这个函数,就指代谁吗?
那么menu_showhide_delay 之类的就是他们的属性吗?貌似也没有这样的属性啊?请那位有经验的大侠执导一下啊.

解决方案 »

  1.   

    this指代的将是imenus_data的实例.
      

  2.   

    这里可以看作imenus_data()是个类(或对象), imenus_data对象被实例化后this指向的就是该对象的实例本身.
      

  3.   

    在这里,你可以把函数imenus_data当成一个类来看。
      

  4.   

    函数中的 this 指向,在函数定义时,是未知的。当函数被调用时,才确定其指向var obj1 = {};
    var obj2 = {};
    var obj3 = {};// 传入什么,返回什么
    function unchange(x) {
    return x;
    }function doSth() {
    this.flag = "做个记号"; if (this == window)
    return alert("this == window");
    for (var x in window) {
    if (this == window[x])
    return alert("this == " + x);
    }
    }// doSth 已定义好,但函数中的 this 是指向谁还是个未知数,具体因调用方式不同而异// 直接调用, this 指向全局对象,浏览器中执行时,就是 window;
    doSth(); 
    // 作为 obj1 的属性调用时,this 指向 obj1
    obj1.doSth = doSth;
    obj1.doSth();
    // 作为函数返回值传出时,已不当作 obj1 的属性, 相当于直接调用。this 指向 window
    unchange(obj1.doSth)(); 
    // 作为构造函数使用时,this 指向刚刚创建的对象
    var newObject = new doSth();
    alert(newObject.flag);
    // call, apply 调用,可转移 this 指向
    doSth.call(obj2);     // 指向 obj2
    doSth.apply(obj3, []);  // 指向 obj3
      

  5.   

    this :指的是调用环境  也就是说   谁调用他    this 就是谁
      

  6.   

    imenus_data0单纯这样执行,this就是window
    否则this指向调用它的对象
      

  7.   

    你这样用就是指他imenus_data0本身