javascript对象中的依赖

时间:2012-10-22 09:37:50

标签: javascript

我有这个JavaScript代码:

var r = {
    a1:function() {
        alert('hey!');
    },
    a2:this.a1
    /*,
    a3:r.a1, //<--Make an error when running
    a4:a1 //<--Make an error when running
    */ 
};

执行r.a1()时,我收到提醒但执行r.a2()时收到消息:

TypeError: r.a2 is not a function

为什么?我怎样才能在一个声明中完成这项工作?

2 个答案:

答案 0 :(得分:5)

this,在您的定义中并未引用r,而是指实际上下文(可能是window

你应该这样定义:

var r = {
   a1: function() {}
   /* a3: r, // Here r is not yet assigned. First the object is created, then its value
             // is assigned to r.
  */
};

r.a2 = r.a1;
r.a3 = r.a1;

答案 1 :(得分:2)

如果您只想使用对象文字,可以这样做:

var r = {
    a1:function() {
        alert('hey!');
    },
    a2:function () {
        this.a1();
    }
};

解释是:在对象声明中,this引用您当前的上下文 - 即您声明this的函数中r的值。

BiAiB所述,您不能在声明中使用对象的名称(在本例中为r),因为在创建对象之前不会分配变量。

如果为对象的成员分配函数,当调用该函数时,上下文将引用您的对象,因此this将为r。