是jQuery程序吗?

时间:2011-01-29 22:25:45

标签: jquery

我还在学习jQuery,但是我越是使用jQuery,它就越是程序化而不是面向对象。例如,我不认为我已经看过或使用过任何jQuery类,虽然我确信在内部使用了一些。我所做的只是方法链接,而不是自己构建对象。例如新的Foo()。此外,jQuery documentation for plug-in development甚至没有提及类。

我的观察是否正确jQuery鼓励您只公开函数和方法,并在编写基于jQuery的库时保留任何自定义类内部?我不是在讨论编写jQuery插件,而是讨论每个应用程序独有的自定义库。

我来自Java,所以我在这里很困惑。

5 个答案:

答案 0 :(得分:5)

jQuery比程序更多OO。

$(domNode)返回一个新的jQuery对象。如果你看一下源代码,jQuery方法会返回一个new对象。

$(domNode).foo在jQuery对象上调用该方法。

您对没有class关键字的事实感到困惑。

function Constructor() {
    this.constructed = true;
}

var o = new Constructor;
alert(o.constructed);

只要使用new关键字,该函数将用作对象构造函数。 Java和JavaScript OO之间存在很大差异。 JavaScript使用原型继承而不是基于类的继承。

jQuery中的链接如图所示here完成。在jQuery对象上调用的每个方法都将返回jQuery对象。

$(obj).css("foo").attr("bar"); // we can call both methods on $(obj)

var o = $(obj).css("foo"); // .css returns $(obj)
alert(o[0] === $(obj)[0]); // o & $(obj) point to the same DOM node
o.attr("bar");

答案 1 :(得分:5)

jQuery主要只是一个基于DOM API的层,加上一些方便的方法,如each(),用于迭代和枚举。它平滑了一些人可能认为是DOM API中的笨拙,而且肯定是各个实现之间缺乏一致性。

它不是一个框架,它不是一种语言。它实际上只是提供了比DOM API提供的更好的体验。

它利用了javascript中的OOP功能,但它本身并没有提供特定的编程范例。还有其他图书馆,例如prototypejsunderscore,更专注于该领域。

答案 2 :(得分:2)

如果文档没有提及类或类似的东西,因为jQuery绝对不是一种语言。它是用Javascript编写的API,Javascript是Prototype programing language

答案 3 :(得分:1)

这不是jQuery困扰你,它是JavaScript :) JavaScript是基于原型的语言,OO风格有点不同。它实际上是通过原型模拟OO(更多信息,你可以在这里阅读 - http://en.wikipedia.org/wiki/JavaScript#Prototype-based

jQuery与OO有很大关系。 $函数实际上是一个用于创建jQuery对象的工厂方法 - 这就是为什么你不写自己new Foo()

以$开头的东西。更像是实用方法。 例如(来自维基百科)jQuery中的映射函数:

$.each([1,2,3], function(){
  document.write(this + 1);
});

答案 4 :(得分:1)

JQuery确实是OO。也许你没有看到类,因为JavaScript中的类看起来有点不同。它们实际上是一些额外的功能:

// Yes, this function is actually a class constructor.
function Demo(a)
{
  // A property is declared easily and can be unset as well. 
  this.a = a;
}

// You can add functions to the prototype, but you can also
// declare functions and assign them to this.functionName in the constructor.
Demo.prototype.test = function()
{
  alert(this.a);
}

d = new Demo('Hello world');
d.test();

所以从来没有“类”或“对象”或类似的东西,我仍然使用面向对象的模型。 此外,任何“松散”函数实际上都是窗口对象的一种方法,就像任何变量都是窗口对象的属性一样。所以JavaScript完全是OO,尽管它很难隐藏这个事实。 :d