【问题标题】:Javascript dot operatorJavascript点运算符
【发布时间】:2014-03-27 15:05:53
【问题描述】:

我是一个 javascript 菜鸟,所以我不明白为什么在下面的代码中作者使用 Avengers.cast 而不仅仅是 Avengers?

var myApp = angular.module('myApp', []);
    myApp.factory('Avengers', function() {
        var Avengers = {};
        Avengers.cast = [{
            name: "Robert Downey Jr.",
            character: "Tony Stark / Iron Man"
        }];
        return Avengers;
    })


function AvengersCtrl($scope, Avengers) {
    $scope.avengers = Avengers;
}

【问题讨论】:

  • 他正在对象Avengers 上设置属性cast。可以使用相同的符号访问它。
  • @lethal-guitar:还有一个问题是为什么将它设置在属性而不是变量上......
  • 显然是设计决策 - 复仇者联盟对象在未来可能会有更多的属性,而不仅仅是演员

标签: javascript angularjs dot-operator


【解决方案1】:

回答您的具体问题:传递信息的方法不止一种。

作者本可以让Avengers 服务只是一个数组,而不是一个带有数组的对象。

所以选择有点武断,正如您似乎正在接受的那样。

也就是说,如果作者计划用更多属性扩展Avengers 服务,那么这就是选择带有数组的对象的原因。

尽管如果您只是打算这样做,您应该查看constant - 也许它比factory 更合适。

【讨论】:

    【解决方案2】:

    在您的代码中,Avengers 的 cast 属性设置为特定对象。假设,最初 Avengers 没有价值。在工厂部分,Avengers变成了

    Avengers.cast = [{
        name: "Robert Downey Jr.",
        character: "Tony Stark / Iron Man"
    }];
    

    您可以在代码中的某处使用它,例如 console.log(Avengers.cast)。以下为函数示例;

    myApp.factory('Avengers', function() {
        return {
            helloWorld: function() {
                return "Hello, World!"
            }
        };
    });
    

    您可以在代码中的某处使用Avengers.helloWorld()。

    总而言之,您可以使用 angular.js 工厂创建对象并为该对象设置属性,还可以在该对象中创建函数。更多详情请参考here

    【讨论】:

      【解决方案3】:
          var Avengers = {};
      

      这意味着:创建一个新对象并通过变量 Avengers 引用它

          Avengers.cast = [{
              name: "Robert Downey Jr.",
              character: "Tony Stark / Iron Man"
          }];
      

      这意味着:刚刚创建的对象现在有一个名为cast 的属性。这是一个数组,只包含一个对象(具有两个字符串值的属性)。

      【讨论】:

      • 那么为什么要声明 var Avengers = {};和 Avengers.cast 当我删除 var Avengers = {}; 时代码似乎工作相同时行并将 Avengers.cast 更改为 Avengers?非常感谢您的回答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2020-06-29
      • 1970-01-01
      • 2011-02-19
      • 2012-04-19
      • 2021-08-01
      • 2012-02-01
      相关资源
      最近更新 更多