在创建js对象时,为什么我不能在另一个定义的函数中使用已定义的函数?

时间:2015-08-08 09:18:37

标签: javascript

代码就像这样

var ob = {
    a: function() {
        b()
    },
    b: function() {
        console.log("hi")
    }
};

如您所见,您无法

ob.a() //returns error

有人可以深入解释原因吗?

3 个答案:

答案 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()