问题描述
代码像这样
var ob = {
a: function() {
b()
},
b: function() {
console.log("hi")
}
};
如您所见,您做不到
ob.a() //returns error
有人可以深入解释原因吗?
1楼
因为b在当前作用域中不存在(在这种情况下为全局范围)。
但是,这可行:
var ob = {
a: function () {
this.b()
},
b: function () {
console.log('hi')
}
};
因为this是指ob对象。
2楼
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包含对您定义的对象的引用。
因此,使用它可以访问is属性。
这是第一种更好的方法,因为如果您稍后决定将ob的名称更改为obj ,则不会在两个地方进行更改。
3楼
在任何地方都没有定义函数b ,它是对象ob的属性,因此您可以在a内部a其称为this.b :
var ob = {
a: function () {
this.b();
},
b: function () {
console.log("hi");
}
};
ob.a();
您也可以作为ob.b()访问b 。