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



我将继续学习本教程: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工厂。

最新更新