我自己写了个对象,如下:obj={
  a :[],
  b :{},
  c : function(){
     ……
  },
  d : function(){
    obj.a.push('3');
    obj.c();
  }
};请问这个obj如何定义,使在c、d函数里面,直接this 调用该对象的变量?
也就是使this指向Obj。
小弟 对prototype理解不深,不知道是不是通过它实现。

解决方案 »

  1.   

       this.a.push('3');
       this.c();
      

  2.   


    obj={
      a :[],
      b :{},
      c : function(){
         ……
      },
      d : function(){
        this.a.push('3');
        this.c();
      }
    };
    你写的这段代码就可以直接使用this替代obj
      

  3.   

    你写的也对,或者obj={
      me:this,
      a :[],
      b :{},
      c : function(){
         ……
      },
      d : function(){
        this.a.push('3');
        this.c();
      }
    };
      

  4.   

    你写的那个
    var obj = {};
    就等于var obj = new Object();而Object并没有prototype。
    只有Function才有prototype在Object里,this永远指向他的挂靠对象。因为他可以看成是已经实例化的对象
    在Function里
    function Test(name) {
        this.name = name;
    }
    Test.prototype = {
        sayHello: function() {
            alert(this.name);
        }
    };
    new Test().sayHello();
    function必须定义在原型上,this才能指向对象。而不是函数对象
      

  5.   

    你可以把function Test看成是构造函数。把Test看成是类,Test.prototype则是public方法和类级属性的集合
      

  6.   

    this是对操作者的引用。
    比如你定义一个 var i = 0; // 此时有隐藏的this,this为window
    你定义一个 var  c = function(){} // 此时的this仍然为window。谁的函数,window的
    但是比如lz上面定义的方法 var obj = {a:1,b : function(){return this.a++;}}
    如果执行一句  ojb.b(); 函数被执行一般都是被副本被拷贝至内存空间,谁的内存空间,this的,this是谁,obj。所以在编译时this被替换成obj。
    如果  var f = function () { return this.a ;} ; f(); // 这样就会报错,window没有a属性。
    如果把  obj.f =f ; obj.f(); // 这样就好了,因为 this 有人认领了。
    this可以随便使用,但是不能随便调用。
      

  7.   


    你这样说,lz怎么看得懂。
    this代表离他最近的对象,在最顶级函数调用的时候,代表window例1:
    function test() {
        alert(this);
    }
    alert(this); // window
    new test();// Object(代表new出来的object)
    test(); // window
    例2:
    function Father(name) {
        this.name = name;
    }
    function Child(name) {
        this.Father = Father;
        // Father的this挂靠到Child上,形成对象冒充(也就是说,Father中的this,就是现在看到的this)
        this.Father(name);
        delete(this.Father);
    }
    alert(new Child("123").name);
      

  8.   

    这种方法当然试过了,里面的this,指向的不是obj这个对象。
      

  9.   

    你如果是在object中,直接this就ok了
      

  10.   

    虽然在object中,直接用this,但是有些时候,可能this的指向会变。
    使用createDelegate方法,问题解决了。