我是StackOverflow的新手,不确定是否在这里问这个问题,所以如果我在错误的地方问这个问题,请告诉我。

我想在javascript(例如ASP.NET)中实现dataSource。因此,我创建了一个具有以下功能的jQuery插件:

$.getUniqueString = function (prefix) {
    if (!prefix) prefix = "s";
    for (var loopIndex = 0; true; loopIndex++) {
        if (typeof window[prefix + loopIndex] != "undefined") { // if sourceId exists
            continue;
        }
        prefix = prefix + loopIndex;
        break;
    }
    return prefix;
}

$.fn.dataSource = function (source) {

    var sourceId;
    if (!source) {
        sourceId = $(this).attr("data-source-id");
        return window[sourceId];
    }

    sourceId = $.getUniqueString();
    $(this).attr("data-source-id", sourceId);
    window[sourceId] = source;
}


这个插件工作正常。到目前为止,我还没有遇到任何困难。这是一个工作示例的链接(提琴):http://jsfiddle.net/Gu2KQ/

但是,我的问题是:


我的代码是否足够安全,以使客户端浏览器不会崩溃?
有什么建议可以进一步优化此代码?
还有其他选择可以更好地实现相同功能吗?


任何帮助,将不胜感激。

最佳答案

此处无需评估。您可以获取全局变量并将其设置为window对象的属性。

$.getUniqueString = function (prefix) {
    if (!prefix) prefix = "s";
    for (var loopIndex = 0; true; loopIndex++) {
        if (typeof window[prefix + loopIndex] != "undefined") { // if sourceId exists
            continue;
        }
        prefix = prefix + loopIndex;
        break;
    }
    return prefix;
}

$.fn.dataSource = function (source) {

    var sourceId;
    if (!source) {
        sourceId = $(this).attr("data-source-id");
        return window[sourceId];
    }

    sourceId = $.getUniqueString();
    $(this).attr("data-source-id", sourceId);
    window[sourceId] = source;
}

08-06 03:18