如何在没有jQuery的情况下编写javascript插件

如何在没有jQuery的情况下编写javascript插件,javascript,prototype,Javascript,Prototype,使用jQuery编写插件相对容易,只需使用$.fn,就可以了。像这样: $.fn.analyse = function() { ... } 但是如果您不能使用jQuery呢 假设我希望能够使用以下代码: document.querySelector("#mydiv").analyse(); 我可以这样做: Object.prototype.analyse = function() { ... } wrap("#mydiv").analyse(); 但据我所知,这是不受欢迎的 这里有一些东

使用jQuery编写插件相对容易,只需使用$.fn,就可以了。像这样:

$.fn.analyse = function() {
...
}
但是如果您不能使用jQuery呢

假设我希望能够使用以下代码:

document.querySelector("#mydiv").analyse();
我可以这样做:

Object.prototype.analyse = function() {
...
}
wrap("#mydiv").analyse();

但据我所知,这是不受欢迎的

这里有一些东西可以让你开始:

var proto_methods = {
    analyse: function() {
        var node = this.node;

        // ...
    }
}, wrap, _wrap;

_wrap = function(selector) { this.node = document.querySelector(selector); };
_wrap.prototype = proto_methods;

wrap = function(selector) {
    return new _wrap(selector);
};
像这样使用它:

Object.prototype.analyse = function() {
...
}
wrap("#mydiv").analyse();
如果您想添加更多插件(而且更面向对象),请使用此选项:

您可以随时调用
wrap.fn
,原型将被更新

但是,请注意,这并不是jQuery的真正替代品,因为有很多东西我没有包含在这段代码中。
wrap
函数在许多方面都不如jQuery的
$
高级和有用


我希望这能有所帮助。

刚刚写了一个样板。它没有自己的选择器逻辑,因为它是为D3.js之上的库设计的,D3.js已经有了自己的选择器引擎。

然后您只需编写一个接受DOM元素的函数。您的问题是什么?您可以创建一个对象类型来替换jQuery并对其进行修改——我想您只需要一点管道来进行选择。@Hogan很抱歉回答得太晚了。问题是:如果
object.prototype.extension
不受欢迎,那么扩展对象功能的首选方法是什么?您可以从原始(带注释的)jQuery源代码学习如何建模代码-谢谢。。。这对我帮助很大。。。如何在此设置选项?您是否愿意对每个部分进行评论,解释您为什么选择这样做?现在它只是一堆代码,函数相互调用并创建实例。这不是很能自我解释的