【问题标题】:Tiny JavaScript library stopped working微型 JavaScript 库停止工作
【发布时间】:2014-02-02 01:07:44
【问题描述】:

对于我在 SO 上回答的上一个问题,我制作了以下库。

(function(){
    var LS = function(){
        return new LS.fn.init();
    };
    LS.fn = LS.prototype ={
        //Check to see if the browser suports LocalStorage
        init : function(){
            this.ls = (typeof(Storage)!=="undefined") ? false : true;
            return this;
        }
    }
    LS.fn.init.prototype = LS.fn;
    LS.fn.init.prototype = {
        set : function(name, val){
            if(this.ls) localStorage.setItem(name, val);
        },
        get : function (name){
            if(this.ls) return localStorage.getItem(name);
        },
        remove : function(name){
            if(this.ls) localStorage.removeItem(name);
        },
        test: function(){
            alert("hi")
        }
    }
    window.LS = window.ls = LS;
})();

直到最近,这一切都很好。

我收到如下错误:

LS.set("foo", "bar"); // Error: undefined is not a function... 

即使是下面的代码也会报错:

LS.test();

为什么这停止工作了?

谢谢。

注意:以前,我有一个错字,但现在我已经修正了它,它仍然不起作用。

【问题讨论】:

  • 你确定LS.fn = LS.protorype ={ 是正确的吗?
  • protorype != 原型
  • @stewart715 谢谢,我没注意到。

标签: javascript debugging error-handling local-storage


【解决方案1】:

您的window.LS 被初始化为一个函数,您似乎使用它就好像您希望它被初始化为该函数的返回值。

改变这一行:

window.LS = window.ls = LS;

到:

window.LS = window.ls = LS();

此外,请尝试简化您的库代码。看起来非常复杂。至少稍微注释一下,以表明各个部分的作用/用途。例如,有错字 (LS.protorype) 的部分没有在任何地方使用。

【讨论】:

  • LS.protorype 确实必须更改。但由于 LS 是一个变量,我不必将其更改为 window.LS = window.ls = LS();。不信,看jQuery源代码的最后几行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2012-11-12
  • 2016-12-31
  • 2018-09-05
  • 2015-11-26
相关资源
最近更新 更多