我正在使用introjs库。
请参阅此处的原始代码。
我希望能够编写var = new IntroJs()
而不是调用该start()
方法。
我怎样才能做到这一点?
为什么不简单地包装 introJs 提供的工厂并在包装器中调用 start 呢?
您可以在外部使用类似这样的方法(未经测试):
var introJsWrapper = function(targetElm) {
var ijs = introJs(targetElm);
ijs.start();
return ijs;
};
或者,您可以在 introJs 代码的分支中执行此操作,方法是将其公开为 main 函数的属性,例如:
var introJs = function (targetElm) {
if (typeof (targetElm) === 'object') {
// ...
}
introJs.autoStart = function(targetElm) {
var ijs = introJs(targetElm);
ijs.start();
return ijs;
};
请注意,在 introJs 中,主函数只是内部构造函数周围的一个非常薄的参数测试/更改包装器。调用它间接调用构造函数。所以据我所知,真的不需要直接访问这个内部构造函数。
嗯,应该是这样的。我假设这些都包含在一个闭包中,因为代码似乎暗示有一些内部函数正在运行。这是我收集的。这不是一个完整的实现,因为我不知道在构造函数中如何使用this
when 调用。new 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;
}
只需一个空的构造函数就足够了。正如 Jan 所说,这没什么用,但如果你喜欢这个符号......
好的,所以基本上这解决了我的问题:
introJs.fn = IntroJs.prototype = {
...
initialize: function() {
return this;
}
...
}
现在,调用introJs().initialize()
给了我库而不调用start()
方法。