【问题标题】:Creating new JS library - Help deciding the base structure创建新的 JS 库 - 帮助确定基本结构
【发布时间】:2011-09-16 23:16:09
【问题描述】:

我正在为一家公司创建一个新库。我遵循的结构是

    (function() {
            var lib = function() {
                    //some private and public fn definitions

                    //setting publically avbl functions
                    return {
                    func1 : func1, func2: func2
                    };
            };
            return (window.lib = lib);
    })();

现在我怎么称呼它

    lib.func1();

我希望能够将我的图书馆称为

    lib(function | string | object).someproperty

如何转换我的代码。尝试过这样的事情

    function lib() {
            return new arguments.callee(arguments);
    }

    lib.prototype={
            publicfunc: function() {
            }
    }

在此我在访问私有函数时遇到了一些问题,因为它超出了库原型中定义的公共函数的范围。

【问题讨论】:

标签: javascript closures


【解决方案1】:

在此我在访问私有函数时遇到了一些问题,因为它超出了库原型中定义的公共函数的范围。

这是因为没有private 这样的东西,只有local。您不能访问范围之外的局部变量。

原型不能与构造函数中的局部变量对话。围绕这个有各种各样的技巧,比如保持实例的公共哈希,但你会失去“隐私”

【讨论】:

    【解决方案2】:
    var lib = (function (param) {
    
       var func = function () {
         /// your code
    
         return {
             animate : function () {
              // do the animation
              return this;
         }
       }
    
       return func;
    })();
    

    这可以是基本的 fprmat。

    好的,这就是我的使用方法。

    lib(function() {...});
    

    lib(selectItem).animate();
    

    因为我返回了this,如果有的话,我可以运行另一个方法。

    lib(selectItem).animate().animate().animate().animate() ....;
    

    我希望你能找到这种格式的用途,当然我把它写得很基础

    【讨论】:

    • 对于lib.myfunc,您可以使用 lib.prototype.myfunc = function() ... ,或者您可以使用 lib.myfunc = func ...
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 2021-12-03
    • 2015-05-21
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多