Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript返回带有函数名的JSON_Javascript_Angularjs_Json - Fatal编程技术网

JavaScript返回带有函数名的JSON

JavaScript返回带有函数名的JSON,javascript,angularjs,json,Javascript,Angularjs,Json,我正在学习AngularJS,有人编写了以下代码: .factory('cribs',function(){ var data = [{ name: "jack", last: 'doe' },{ name: 'hazel', last: 'man' } ]; function getcrib(){ return data; } retur

我正在学习AngularJS,有人编写了以下代码:

.factory('cribs',function(){
    var data = [{
        name: "jack",
        last: 'doe'
    },{
        name: 'hazel',
        last: 'man'
    }
    ];

    function getcrib(){
        return data;
    }
    return{
        getcrib: getcrib // what the heck does this mean?
    }
})

我对回程线感到困惑。。。他返回了一个对象
getcrib
,其中包含一个返回数据的函数?开始时的
getcrib
是否需要完全相同的情况?

下面的四个代码都做相同的事情。希望您能更好地理解函数声明。:)

代码1:

.factory('cribs',function(){
    var data = 3.142;
    function getcrib(){
        return data;
    }
    return{
        getcrib: getcrib 
    }
})
//console.log(cribs.getcrib()) outputs 3.142
.factory('cribs', function() {
  var data = 3.142;
  return {
    getcrib: function() {
      return data;
    }
  }
})
//console.log(cribs.getcrib()) outputs 3.142
.factory('cribs',function(){
    var data = 3.142;
    function GET_PI_VALUE(){
        return data;
    }
    return{
        getcrib: GET_PI_VALUE
    }
})
//console.log(cribs.getcrib()) outputs 3.142
.factory('cribs', function() {
  var data = 3.142;
  return {
    getcrib: function GET_PI_VALUE() {
      return data;
    }
  }
})
//console.log(cribs.getcrib()) outputs 3.142
说明:

  • 返回一个对象
  • 此对象的属性为
    getcrib
    ,它引用的函数名称也是
    getcrib
  • 代码2:

    .factory('cribs',function(){
        var data = 3.142;
        function getcrib(){
            return data;
        }
        return{
            getcrib: getcrib 
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs',function(){
        var data = 3.142;
        function GET_PI_VALUE(){
            return data;
        }
        return{
            getcrib: GET_PI_VALUE
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function GET_PI_VALUE() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    说明:

  • 返回一个对象
  • 此对象的属性为
    getcrib
    ,该属性引用匿名函数。(匿名是一个没有名字的函数)
  • 代码3:

    .factory('cribs',function(){
        var data = 3.142;
        function getcrib(){
            return data;
        }
        return{
            getcrib: getcrib 
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs',function(){
        var data = 3.142;
        function GET_PI_VALUE(){
            return data;
        }
        return{
            getcrib: GET_PI_VALUE
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function GET_PI_VALUE() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    说明:

  • 返回一个对象
  • 此对象的属性为
    getcrib
    ,它引用一个名为
    GET\u PI\u VALUE
    的函数。这与代码1的情况相同
  • 代码4:

    .factory('cribs',function(){
        var data = 3.142;
        function getcrib(){
            return data;
        }
        return{
            getcrib: getcrib 
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs',function(){
        var data = 3.142;
        function GET_PI_VALUE(){
            return data;
        }
        return{
            getcrib: GET_PI_VALUE
        }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function GET_PI_VALUE() {
          return data;
        }
      }
    })
    //console.log(cribs.getcrib()) outputs 3.142
    
    说明:

  • 返回一个对象
  • 此对象的属性为
    getcrib
    ,它引用一个名为
    GET\u PI\u VALUE
    的函数。这与代码3的情况相同
  • 代码5

    .factory('cribs', function() {
      var data = 3.142;
      return {
        getcrib: function GET_PI_VALUE() {
          return data;
        }
      }
    })
    //console.log(cribs.GET_PI_VALUE()) gives an error, complaining GET_PI_VALUE is not a function.
    
    说明:

  • 返回一个对象
  • 此对象的属性为
    getcrib
  • GET\u PI\u VALUE
    被完全隐藏,因此出错。
    GET\u PI\u VALUE
    函数本身没有返回,只返回引用(通过getcribs)

  • 分号错误,但是是的,
    getcrib
    是对上面几行中声明的函数的引用。属性名
    getcrib
    只对工厂的用户重要。哦,是的,分号是错误的。他不能直接返回函数本身而不是那个吗?这行代码类似吗
    var t=function getcrib(){..}返回t本身吗?在这个小示例中,这并不重要,但当事情变得更复杂时,可以在一个地方看到:'return{usefulFunction:usefulFunction,anotherUsefulFunction:anotherUsefulFunction,…},它可以帮助人们快速查看工厂“导出”的内容,而不必费力地阅读大量函数声明。是的,直接返回函数而不是使用单个方法返回对象通常是一个好主意,但是方法名称可能会有问题,也可能没有问题。你会想问代码的作者为什么选择这种方法,我们不知道。非常感谢大家!!!:谢谢你!我对返回不带括号的函数和带括号的函数感到困惑。我真的很慢,但这真的很有帮助!感谢您对NoobJavaScripter的透彻解释:Dblame那些提出这种令人困惑的约定的javascript发明者PAnd javascript没有正确的
    名称,我以为他返回的是对象而不是函数,我还了解了
    prototype.constructor=ObjectNameOrfunctionName并结合我所看到的。这让我很困惑。哦,还有一个问题,如果返回工厂,内部的函数是否也可以自动调用?或者他应该做类似于
    this.function getcrib(){..}
    ?@Chopnut这是一个很好的跟进。不,函数内部是不可调用的。他们被跟踪。您只能访问返回的内容。这是一种很好的封装方式。看到我对代码5Wow的编辑真棒!我不会知道的!因为任何创业教程都不会告诉你这一点!因为他没有解释为什么他必须返回一个函数,我觉得这很奇怪。。老兄,你是个救命恩人!现在就这样了(超级谢谢!成交。