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

Mootools store method: Where is the data stored?

本文关键字:存储 在哪里 数据 方法 Mootools      更新时间:2023-09-26

我理解用元素存储一些数据的想法,但作为一名Javascript学习者,我很好奇使用这种方法存储的数据到底在哪里。

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

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

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

在定义方法的闭包中,每个元素都有一个专用{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/

更多信息:

  • http://mootools.net/docs/core/Element/Element#Element:retrieve
  • https://github.com/mootools/mootools-core/blob/master/Source/Element/Element.js#L1003-2019年1月

至于为什么它是这样,而不是在元素上作为属性,它更快:只需要在元素本身(uid)上有一个属性,不需要对读/写内容进行DOM访问,避免通过元素和循环引用进行泄漏。它还可以通过删除以前在没有destroy API的情况下存储数据的元素来创建泄漏。