javascript - 具有 close 的库无法根据其构造函数创建新对象

标签 javascript closures

我在 new 线上收到了 Uncaught TypeError: object is not a function 错误 它只能运行,如果我这样做 var item = mylib;

但是,我不太清楚这里的问题是什么。

(function(window){
    function mylib (){
        var Library={};
        Library.localVar1="One";
        Library.localVar2="Two";
        Library.func1 = function (){
            console.log("func1 output"+Library.localVar1)
            return true;
        }
        Library.func2 = function (){
            Library.func2Var1   = "func2One";
            console.log("func2 output"+Library.localVar2)
            return Library.func2Var1;
        }
        return Library;
    }
    //define globally if it doesn't already exist
    if(typeof(Library) === 'undefined'){
        window.mylib = mylib();
    }
    else{
        console.log("Library already defined.");
    }

})(window);

var item =  new window.mylib;
    console.log(item.localVar2,"var2");
    console.log(item.func2(),"func2");
    console.log(item.func1(),"func1");

最佳答案

当您使用var item = new window.mylib;时,我假设您想从Library创建一个新实例。

但是在您的代码中,Library 是一个Object,而不是构造函数,构造函数应该是一个Function。所以你会得到这个错误。

(function(window){
    function mylib (){
        var Library = function() {
          // Set self's variable
          this.localVar1="One";
          this.localVar2="Two";
        }
        
        // Use prototype to define the shared function.
        Library.prototype.func1 =  function (){
            console.log("func1 output"+this.localVar1)
            return true;
        };
      
        Library.prototype.func2 =  function (){
            Library.func2Var1   = "func2One";
            console.log("func2 output"+this.localVar2)
            return Library.func2Var1;
        };

        return Library;
    }
    //define globally if it doesn't already exist
    if(typeof(Library) === 'undefined'){
        window.mylib = mylib();
    }
    else{
        console.log("Library already defined.");
    }

})(window);

var item =  new window.mylib();  // Create a instance of Library
    console.log(item.localVar2,"var2");
    console.log(item.func2(),"func2");
    console.log(item.func1(),"func1");

关于javascript - 具有 close 的库无法根据其构造函数创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591825/

相关文章:

javascript - 下拉动画图标

javascript - 自定义指令中的 ng-table 错误 "Cannot set property ' $data' of null"

php - 从闭包返回一个值到 main 方法

javascript - 在javascript中的不同范围之间返回值

javascript - 如何编写一个 JS 回调函数来记住变化变量的旧值?

javascript - 我不明白为什么轮播中的幻灯片不可见

javascript - JavaScript 中字符串的最大长度是多少?

javascript 正则表达式匹配不包括结束模式的字符串

arrays - $0 和 $1 在 Swift 闭包中是什么意思?

python - 使用闭包实现 python 生成器