JavaScript返回带有函数名的JSON
我正在学习AngularJS,有人编写了以下代码: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
.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
.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
,该属性引用匿名函数。(匿名是一个没有名字的函数).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的情况相同.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的情况相同.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的编辑真棒!我不会知道的!因为任何创业教程都不会告诉你这一点!因为他没有解释为什么他必须返回一个函数,我觉得这很奇怪。。老兄,你是个救命恩人!现在就这样了(超级谢谢!成交。