代码之家  ›  专栏  ›  技术社区  ›  Marco Demaio

jquery等javascript插件设计模式

  •  7
  • Marco Demaio  · 技术社区  · 14 年前

    有人能用javascript写下一个非常简单的基本例子来概念化(希望能让我理解)jquery插件设计模式是如何完成的以及它是如何工作的吗?

    我对如何为jquery创建插件不感兴趣(所以 这里根本没有jquery代码 ) 我对一个简单的解释很感兴趣(可能需要一些javascript代码)来解释 如何实现插件概念 .

    请不要回复我去读jquery代码,我试过了,但是我太复杂了,否则我就不会在这里发布问题了。

    谢谢!

    3 回复  |  直到 12 年前
        1
  •  5
  •   Tomalak    14 年前

    jquery在名为 fn . 这些是可以对每个jquery对象调用的。

    当你这样做的时候 $("div.someClass") 您将得到一个jquery对象,其中包含 <div> 那个类的元素。现在你可以了 $("div.someClass").each( someFunction ) 申请 someFunction 给他们每个人。这意味着 each() 是存储在 FN (在本例中是内置的)。

    如果您扩展(添加到)内部 FN 对象,然后自动使自定义函数具有相同的语法。假设有一个函数将所有元素记录到控制台中,称为 log() . 可以将此函数附加到 $.fn ,然后将其用作 $("div.someClass").log() .

    附加到 FN 对象将以这样的方式调用 里面 功能体 this 关键字将指向您使用过的jquery对象。

    通常的做法是返回 在自定义函数的末尾,以便方法链接不会断开: $("div.someClass").log().each( someFunction ) .

    有几种方法可以将函数附加到 $FN 反对,有些人比其他人安全。一个相当安全的方法是:

    jQuery.fn.extend({
      foo: function() {
        this.each( function() { console.log(this.tagName); } );
        return this;
      }
    })
    
        2
  •  1
  •   naugtur    14 年前

    托马拉克已经发布了你需要知道的几乎所有信息。

    还有最后一件事可以帮助jquery使用 关键字。

    叫做apply()

    var somefunction=function(){
    alert(this.text);
    }
    var anObject={text:"hello"};
    
    somefunction.apply(anObject);
    //alert "hello" will happen
    

    它确实有助于创建抽象,以便框架/插件用户只需使用 直觉告诉他们,无论你的代码里有什么

        3
  •  0
  •   Benoit    14 年前

    它和其他许多js框架一样,使用面向javascript原型的方式工作。

    例如,您可以声明一个简单的函数

    var alertHelloWorld = function() {
        alert('hello world');
    }
    

    然后将其绑定到现有对象(包括dom节点)

    document.doMyAlert = alertHelloWorld;
    

    如果你这样做

    document.doMyAlert();
    

    将执行alertHelloWorld函数

    您可以阅读更多关于javascript对象原型的内容 here