2017-07-09 156 views
2

我试图访问一个对象(childObject1),它是函数的同级对象(childObject2)。虽然是这种情况,但它看起来好像函数不能访问childObject1,但它可以访问它内的字段,如grandChildObject1从函数访问同级对象

parentObject: { 
    childObject1: "Child Object 1", 
    childObject2: function() { 
      var grandChildObject1 = "Grandchild Object 1"; 
      console.log(childObject1); 
      console.log(grandChildObject1) 
    } 
} 

第一日志打印:

未定义

第二日志打印:

孙子对象1

为什么功能无法访问childObject1的值(如果它们是兄弟)?

+1

'childObject1'不是一个变量。它是在'parentObject'上定义的属性,而'grandChildObject1'是在本地范围内定义的变量。要访问该属性,您可以通过定义该属性的对象访问该属性。 – abhishekkannojia

回答

2

你必须使用this

var parentObject = { 
 
    childObject1: "Child Object 1", 
 
    childObject2: function() { 
 
      var grandChildObject1 = "Grandchild Object 1"; 
 
      console.log(this.childObject1); 
 
      console.log(grandChildObject1); 
 
    } 
 
}; 
 

 
parentObject.childObject2();

+0

感谢您的回答,但不幸的是,仍然会产生“未定义” –

+0

尝试运行我刚刚添加的代码段。它在那里工作:p –

+1

谢谢你的回答。 –

1

您需要使用this。改变

console.log(childObject1); 

console.log(this.childObject1); 
0

就像任何其他静态方法,你会去,虽然父对象如parentObject1.childObject1从childObject2访问它时。没有静态对象的实例,因此它们不是真正合乎逻辑的兄弟姐妹。

+0

但是有没有什么办法像你描述的那样获取parentObject1? –

+0

是的,你可以console.log(this.childObject1);如answer或console.log(parentObject.childObject1)中提到的;从你的childObject 2中,他们应该提供相同的结果。 – calingasan