繁体   English   中英

访问工厂的对象时,为什么不必在Angular.js工厂中引用“中间”对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM