如何为静态库创建构造函数

时间:2013-05-09 20:00:56

标签: javascript prototype intro.js

我正在使用introjs库。

查看原始代码here

我希望能够编写var = new IntroJs()而不是调用start()方法。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

为什么不简单地包装introJs提供的工厂并在包装器中调用它?

您可以使用此类内容(未经测试)在外部执行此操作:

var introJsWrapper = function(targetElm) {
    var ijs = introJs(targetElm);
    ijs.start();
    return ijs;
};

或者你可以通过将它作为主函数的属性公开来在introJs代码的一个fork中执行它,例如:

var introJs = function (targetElm) {
    if (typeof (targetElm) === 'object') {
    // ...
}
introJs.autoStart = function(targetElm) {
    var ijs = introJs(targetElm);
    ijs.start();
    return ijs;
};

请注意,在introJs中,main函数只是一个非常薄的参数测试/更改包装器,已经在内部构造函数周围。调用它会间接调用构造函数。因此,就我所见,实际上没有必要直接访问这个内部构造函数。

答案 1 :(得分:1)

嗯,这应该是它。我假设这些都包含在一个闭包中,因为代码似乎意味着有一些内部函数在继续。这就是我收集的内容。这不是一个完整的实现,因为我不知道调用thisnew IntroJS如何在构造函数中使用。我所知道的是你的原型函数在某些属性上运行。

//internal functions
function _mergeOptions(target){/*implementation*/}
function _introForElement(el){/*implementation*/}
function _goToStep(step){/*implementation*/}
function _exitIntro(target){/*implementation*/}
function _setHelperLayerPosition(nodeList){/*implementation*/}

//constructor
function IntroJs(first){
  this._options = {};
  this._introChangeCallback;
  this._introCompleteCallback;
  this._introExitCallback;
}

答案 2 :(得分:0)

只需一个空构造函数即可。正如Jan所说,这很没用,但如果你喜欢这个符号......

http://plnkr.co/edit/eFzkKJ14TeaMY44GDxR2

答案 3 :(得分:0)

好的,基本上这解决了我的问题:

introJs.fn = IntroJs.prototype = {
    ... 
    initialize: function() {
        return this;
    }
    ...
}

现在,调用introJs().initialize()会在不调用start()方法的情况下为我提供库。