具有 close 的库无法基于其构造函数创建新的 obj

A library with close can't create a new obj base on its constructor

我在 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");