哪种方式是正确的,为什么?

时间:2011-03-07 21:08:35

标签: javascript json

如果我想从方法中为一个数组分配一个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;
}

4 个答案:

答案 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或类似的东西来调用函数。