如果我想从方法中为一个数组分配一个JSON值,哪种方式是正确的,为什么?
obj:{ filters: myMethod }
OR
obj:{ filters: myMethod() }
假设过滤器需要一组过滤器
function myMethod(){
var filters = [];
filters.push(new filter("filter1");
filters.push(new filter("filter2");
filters.push(new filter("filter3");
return filters;
}
答案 0 :(得分:3)
这一个:
obj:{ filters: myMethod() }
它分配功能的结果,另一个:
obj:{ filters: myMethod }
只是将功能分配给obj,换句话说,你将拥有myMethod
的同义词:
obj.filters()
顺便说一句,只是弹出,是字符串:
"obj:{ filters: myMethod() }"
?如果是,则需要'插入'myMethod()的结果,否则当它是javascript代码的一部分时
var a = { obj:{ filters: myMethod() } };
然后就可以了。最后一行可以被字符串化,例如using jquery,如果需要
答案 1 :(得分:0)
两者都是完全合法的Javascript,第一个将函数myMethod
本身分配给filters
,第二个将评估函数并将其返回值赋给filters
。
在你的情况下,因为你的目的是将它序列化为JSON,你可能想要调用该方法(第二个)。
答案 2 :(得分:0)
第一个将分配对方法的引用,而第二个分配方法的结果(返回的数组)。
更确切地说: 在第一种情况下,obj.filters()将在第二种情况下返回与obj.filter相同的内容。
请注意,obj.filters()将始终调用该方法,而第二个obj.filters是一个数组。
答案 3 :(得分:0)
在JSON中提供函数调用或其他任何需要执行的操作(例如包含方法的对象)是非法的。它只能包含标量值,数组和列表。您需要使函数调用一个名称(类似于您的第一个示例,但作为字符串)。
obj:{ filters: "myMethod" }
然后你需要使用call
or apply
或类似的东西来调用函数。