如何将$ .extend()与变量一起使用

时间:2012-05-18 15:56:39

标签: javascript jquery hash

我试图让一个脚本在window.location.hash中使用多个值,但是我遇到了jquery的$ .extend()函数问题

我尝试了两种方法,但两种方法都没有成功。

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);

            // First way
            var a = {key: value};

            // Second way
            var a = {};
            a[key] = value;

            $.extend(params, a);
        }

        return params;
    },

    ...
}

有人看到了这个问题吗?

3 个答案:

答案 0 :(得分:3)

首先你要写:

 $.extend(this.params, a); or you cant access param

可能还有其他问题。

修改

在我看来你回归a而不是this.params是有道理的。

$.extend(a,this.params);

return a 

答案 1 :(得分:3)

您尝试做的事情有两个问题。第一个是引用问题,因为该对象的params变量应该被引用为this.params。第二个问题是您没有保存对象扩展的结果。所有这些都发生在以下行:

$.extend(params, a);

它应该读取这样的内容:

this.params = $.extend(this.params, a);

答案 2 :(得分:0)

试试这个:

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        var a = [];
        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);
            a.push(key + ":'" + value + "'");           
        }

        $.extend(this.params,(new Function("return {" + a.Join(",") + "}"))());

        return this.params;
    },

    ...
}