我有一家工厂:
.factory('PageType', function () {
return{
first: {
firstFirst: {
firstFirstFirst: this.second.secondFirst
},
firstSecond: "yoyo!"
},
second: {
secondFirst: "hello!!!"
}
}
})
this.second.secondFirst
无效,但this.secondFirst
会有效。如何拨打second.secondFirst
?我试过了PageType.second.secondFirst
,但这是错误的。
答案 0 :(得分:1)
所以你想在对象嵌套的两个点引用相同的值?为什么不在声明返回对象之前先将它分配给变量?
e.g。
myModule.factory('PageType', function () {
secondFirst = "hello!!!";
return {
first: {
firstFirst: {
firstFirstFirst: secondFirst
},
firstSecond: "yoyo!"
},
second: {
secondFirst: secondFirst
}
};
});
this.second.secondFirst
之类的东西不会起作用,因为在那个范围内这指的是匿名函数,(除非你将它包装在另一个匿名函数中,该函数在直接父对象上被称为方法,但是此对象不知道将其作为值引用的祖父对象。 PageType.second.secondFirst
也无法工作,因为工厂定义中的范围内没有PageType(仅在注入PageType的后续函数范围内)。
编辑:
此解决方案的一个变体是声明没有双引用的对象结构,然后在返回对象之前将它们作为单独的语句添加。
PageType = {
foo: {
}
};
PageType.foo.bar = PageType.baz = "hello";
return PageType;