在javascript中展开对象

时间:2015-08-20 22:01:37

标签: javascript jquery

我已经触发了一个名为“搜索”的事件以及一个对象。

    $(".btn-class").on("click", function() {

        var params = {
            "searchText": "sometext",
            "searchProps": ["prop1", "prop2", "prop3"]
        };

        COMP.Util.announce("search", {
            params: params
        })
    });

在另一个班级,我正在听这个事件并处理那个对象:

var ListView = Backbone.View.extend({
        init: function() {
            COMP.Util.listenTo("search", $.proxy(this.applySearch, this));
        },
        applySearch: function(params) {
            // do something
        }
    }
})

我的问题是当'params'传递给applySearch函数时,它就变成了一个包装对象:

params: Object
searchProps: Array[3]
searchText: "sometext"
__proto__: Object
__proto__: Object

如果打印,我得到了:

PARAMS =%5Bobject +对象%5D

我希望能够将Object中的'params'作为纯文本解包,并且还想知道为什么在这种情况下会发生包装

searchProps: Array[3]
searchText: "sometext"
__proto__: Object

这样打印: PARAMS = SEARCHTEXT = sometext&安培; searchProps = PROP1&安培; searchProps = PROP2&安培; searchProps = prop3

2 个答案:

答案 0 :(得分:0)

你可以"打开"对象:JSON.stringify(params)

但是,我认为通过在params对象中添加一个名为params的键可能会使您自己感到困惑。您可能希望保留额外的密钥:

$(".btn-class").on("click", function() {

        var params = {
            "searchText": "sometext",
            "searchProps": ["prop1", "prop2", "prop3"]
        };

        COMP.Util.announce("search",params)
    });

答案 1 :(得分:0)

你可以重用jQuery方法param()来完成你的工作 它接受作为参数数组和普通对象:

var params = {
   "searchText": "sometext",
   "searchProps": ["prop1", "prop2", "prop3"]
};
var paramsEncoded = $.param( params );
alert(paramsEncoded)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>