我有这个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
为什么?我怎样才能在一个声明中完成这项工作?
答案 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。