代码就像这样
var ob = {
a: function() {
b()
},
b: function() {
console.log("hi")
}
};
如您所见,您无法
ob.a() //returns error
有人可以深入解释原因吗?
答案 0 :(得分:2)
Becuase b
在当前范围内不存在(在这种情况下是全局范围)。
然而,这是有效的:
var ob = {
a: function () {
this.b()
},
b: function () {
console.log('hi')
}
};
因为this
引用ob
对象。
答案 1 :(得分:1)
b
是名为ob
的对象的属性。话虽这么说,如果你使用
ob.b
代替b
,您将解决问题。
var ob = {
a:function(){
ob.b()
},
b:function(){
console.log("hi")
}
};
实现此目的的另一种方法是使用this
运算符。
var ob = {
a:function(){
this.b()
},
b:function(){
console.log("hi")
}
};
this
包含对您定义的对象的引用。因此使用它可以访问属性。这是第一种方式的更好方法,因为如果您稍后决定将ob
的名称更改为obj
,则不会在两个位置更改它。
答案 2 :(得分:1)
在任何地方都没有定义任何功能b
,它是对象ob
的属性,因此您可以从this.b
内部将其引用为a
:
var ob = {
a: function () {
this.b();
},
b: function () {
console.log("hi");
}
};
ob.a();
您还可以b
访问ob.b()
。