[英]Why don't you have to refer to an “intermediate” object in an Angular.js factory, when accessing the factory's objects?
我正在学习本教程: https : //thinkster.io/mean-stack-tutorial
它使用以下代码定义Angular.js工厂:
app.factory('posts', [function(){
var o = {
posts: []
};
return o;
}]);
我不明白的是,稍后在控制器中,为了填充变量$ scope.posts,使用了以下代码:
$scope.posts = posts.posts;
这可行,而:
$scope.posts = posts.o.posts;
才不是。 我不明白如何直接在“ posts”工厂中访问“ posts”变量。 这是因为通过键入代码:
return o
现在,所有o对象的代码都被视为“ posts”工厂代码的一部分吗?
变量o不是工厂的属性,它只是一个临时的局部变量。 工厂源代码等效于:
app.factory('posts', [function(){
return {
posts: []
};
}]);
通常,此代码:
var x = <some expression>;
return x;
等效于:
return <some expression>;
这是因为您要返回整个对象。
例如,您可以简化以下代码:
app.factory('posts', [function(){
var o = {
posts: []
};
return o;
}]);
像这样:
app.factory('posts', [function(){
return {
posts: []
};
}]);
它具有相同的逻辑,并且您显然posts.o.posts
...
用简单的术语想象一下。
采取这样的一段代码:
function foo()
{
var bar = {
baz: 5
};
return bar;
}
var myVar = foo();
此时, myVar
指向foo()
创建的bar
。 它没有完全引用foo()
的变量。
因此,要访问bar.baz
,您可以执行myVar.baz
。 您不会做myVar.bar.baz
。
Angular中的工厂本质上是相同的场景,只是包装成Angular工厂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.