javascript – 将element.id设置为副作用的不良做法?

前端之家收集整理的这篇文章主要介绍了javascript – 将element.id设置为副作用的不良做法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在插件/库中编写一个小缓存函数.它需要一个HTMLElement并返回一个Decorator.

return function _cache(elem) {
    if (elem.id === "") {
        elem.id = PLUGIN_NAME + "_" + uid++;
    }
    if (cache[elem.id] === void 0) {
        cache[elem.id] = _factory(elem);
    }
    return cache[elem.id];
}

这里我通过HTMLElement的id在缓存中存储一​​些昂贵的操作.这是一个O(1)查找,但它使用设置elem.id并产生副作用的“不良做法”.

替代方案是在缓存上进行O(N)查找

return function _cache(elem) {
    for (var i = 0,ii = cache.length; i++) {
        var o = cache[i];
        if (o.elem == elem) return o.data;
    }
    var ret = _factory(elem);
    cache.push({ elem: elem,data: ret });
    return ret;
}

但这意味着我的缓存昂贵的方法对HTMLElement没有任何副作用.

题:

这种“副作用”是无辜的,是否值得为我的装饰师进行优化?

真实代码

Gist of plugin template where I use this snippet

编辑:

我显然太累了,忘了data-foo存在.这是应该如何实现的

var attr = "data-" + PLUGIN_NAME + "-cache";

return function _cache(elem) {
    var val = elem.getAttribute(attr);
    if (val === null || val === "") {
        val = PLUGIN_NAME +  "_" + uid++;
        elem.setAttribute(attr,val);
    }
    if (cache[val] === undefined) {
        cache[val] = _factory(elem);
    }
    return cache[val];
}
最佳答案
而不是使用id,使用data-x – 这就是为它创建的.

id有一个特定的含义,看到它自动生成是令人困惑的(即使有适当的记录,这几乎从来没有.)你也冒着轻微覆盖的风险.

原文链接:https://www.f2er.com/jquery/428543.html

猜你在找的jQuery相关文章