1

我正在为可重用项目编写一个小插件,但它需要启动,我只是不知道如何启动。我已将其剥离以显示裸露的骨骼(下):

( function ( window, document, undefined ) {

  var Plugin = function ( elem ) {
    this.elem = elem;
  };

  Plugin.prototype = {

    init : function () {
        // init stuff
    }

  };

  var inputs = document.querySelectorAll('input');
  for ( var i = 0; i < inputs.length; i++ ) {
    new Plugin(inputs[i]).init();
  }

})( window, document );

我想说这大约完成了 80%,我对在哪里“调用”插件感到困惑,简而言之,脚本运行,但我没有调用它。

我需要做这样的事情:

for ( var i = 0; i < inputs.length; i++ ) {
    inputs[i].Plugin();
}

哪个会调用它,目前我只是在对象上调用“新”。关于正确设置(jQuery 样式但没有 jQuery)的任何帮助都会令人惊叹。谢谢!

如果需要,小提琴:

4

2 回答 2

3

请不要试图让它花哨。

for ( var i = 0; i < inputs.length; i++ ) {
    new Plugin(inputs[i]).init();
}

是一个漂亮但被严重低估的 API。但是,如果你坚持,你可以把.Plugin()(它会这样做) on HTMLElement.prototype,这会在 IE7-8 中破坏它。

此外,传递undefined给 IIFE 是一个坏主意。

于 2013-07-16T18:01:17.017 回答
1

扩展 DOM 是个坏主意

但是为了更简单,将初始化的东西移到构造函数中——这就是构造函数的用途:

(function (window, document, undefined) {
  function Plugin(elem) {
    this.elem = elem;
    // init stuff
  }
  Plugin.prototype.otherFunctions = …;

  var inputs = document.querySelectorAll('input');
  for (var i = 0; i < inputs.length; i++)
    new Plugin(inputs[i]);

})(window, document);
于 2013-07-16T18:39:33.560 回答