javascript - prototype 在 jQuery 源代码中是什么意思?

标签 javascript jquery

作为示例,从 jQuery 1.2.6 复制:

jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
        // Make sure that a selection was provided
        selector = selector || document;
        ..........
    },
};

我在这里读过一些帖子,比如 JavaScript: What are .extend and .prototype used for?并且知道可以在子类中使用原型(prototype)来扩展一些方法。

但我无法理解上述 jQuery 片段中的用法。

是否有描述原型(prototype)的规范文档?

谢谢。

最佳答案

所有对象都有一个prototype 属性。它只是一个对象,其他对象可以从中继承属性。您发布的代码段只是将具有某些属性(例如 init)的对象分配给 jQueryprototype,以及别名 jQuery .prototypejQuery.fn 因为 fn 更短,输入起来更快。如果您暂时忘记了 jQuery,请考虑这个简单的示例:

function Person(name) {
    this.name = name;
}
Person.prototype.sayHello = function () {
    alert(this.name + " says hello");
};

var james = new Person("James");
james.sayHello(); // Alerts "James says hello"

在此示例中,Person 是一个构造函数。可以通过使用 new 运算符调用它来实例化。在构造函数中,this 关键字引用实例,因此每个实例都有自己的 name 属性。

Personprototype 在所有实例之间共享。所以 Person 的所有实例都有一个 sayHello 方法,它们继承Person.prototype。通过将 sayHello 方法定义为 Person.prototype 的属性,我们可以节省内存。我们可以很容易地为 Person 的每个实例提供它自己的方法副本(通过在构造函数中将其分配给 this.sayHello),但这效率不高。

在 jQuery 中,当您调用 $ 方法时,您实际上是在创建 jQuery.prototype.init 的实例(记住 jQuery.fn = == jQuery.prototype):

return new jQuery.fn.init(selector, context, rootjQuery);

如果您查看 jQuery.fn.init:

jQuery.fn.init.prototype = jQuery.fn;

实际上,您正在创建一个 jQuery 实例,它可以访问在 jQuery.prototype 上声明的所有方法。如前所述,这比在 jQuery 的每个实例上声明这些方法要有效得多。

关于javascript - prototype 在 jQuery 源代码中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13140292/

相关文章:

jquery - 访问堆叠 SVG 的 :hover or ON MouseEnter

javascript - 每个 session 加载一次网站弹出窗口

javascript - 弹出窗口内具有语义 ui-react 网格宽度的语义 UI

javascript - 表单数组上的补丁值未在 Material 多选上设置值

jQuery - 基于访问次数的 CSS 样式切换器,使用 cookie

javascript - 使用jQuery/Javascript播放歌曲

javascript - 模态打开时在 Bootstrap 模态窗口中自动播放视频

javascript - PHP/AJAX 从ajax获取id

javascript - 我可以使用 Javascript 来检测复选框是否已被选中吗?

javascript - 如何旋转 HighCharts 条形图使其垂直而不是水平?