Mootools存储方法:数据存储在哪里?

时间:2014-09-06 17:21:41

标签: javascript mootools

我理解使用元素存储一些数据的想法,但作为Javascript学习者,我很好奇使用此方法存储的数据实际上是什么。

mootools帮助页面非常简单,对我没有帮助。

有人能告诉我在哪里可以找到更全面的mootools吗?

1 个答案:

答案 0 :(得分:4)

存储实际工作的方式很简单。

在定义方法的闭包中,每个元素都有一个私有{object}用作字典。该闭包的任何方法都可以访问存储对象,但它不能直接从外部穿孔。

在工作代码中:

(function(){
    // private shared object
    var Storage = {};

    /**
     * @param {string} key
     * @param {*} value
     * @return {HTMLElement}
     */
    Element.implement('write', function(key, value){
        // Slick can get a unique id for every element. this is key in storage
        var uid = Slick.uidOf(this),
            s = Storage[uid] || (Storage[uid] = {});
        return (s[key] = value), this;
    }); 

    /**
     * @param {string} key
     * @param {*=} initial value, optional
     * @return {*}
     */
    Element.implement('read', function(key, initial){
        var uid = Slick.uidOf(this),
            s = Storage[uid] || (Storage[uid] = {}),
            undef = 'undefined';
        typeof initial !== undef && typeof s[key] === undef && (s[key] = initial);
        return s[key];
    });

}());


var foo = document.id('foo');

foo.write('hello', 'there'); // save
console.log(foo.read('hello')); // read

console.log(foo.read('foo', 'bar')); // via initial value api, bar. 

这几乎是完整的读/写api - 唯一缺少的是.eliminate功能 - 请记住它比实际代码稍微更具防御性,这是用perf编写的记住所以它没有那么多。

http://jsfiddle.net/aj0pccew/2/

更多信息:

为什么它以这种方式而不是作为属性的元素,它更快:只需要元素本身的1个属性(uid),不需要DOM访问读/写东西,避免通过元素和循环引用泄漏。它还可以通过删除以前在destroy API存储中存储数据的元素来创建泄漏。