如何定义一个可以链接到其他Javascript库的Javascript函数

How can I define a Javascript function that can be chained onto other Javascript libraries?

本文关键字:Javascript 链接 其他 函数 库的 一个 何定义 定义      更新时间:2023-09-26

如何定义一个可以链接到jQuery方法或其他库方法的方法?

因此,假设我有以下代码:

var Calculator = function(start) {
var that = this;
this.add = function(x) {
    start = start + x;
    return that;
};
this.multiply = function(x) {
    start = start * x;
    return that;
};

然后,我可以根据需要将方法链接到计算器对象:

new Calculator(0)
    .add(1)
    .multiply(2)

但是,如果我想将一个名为"my_method"的方法链接在jQuery对象之上,如下所示:

$(document).append("<p></p>").my_function();
$(document).my_function();

我将如何定义这样的函数?我尝试将my_function添加到"Object"类中,但这不适用于对象数组:

Object.my_function = function() {
     alert(this); 
     return this;
};

jQuery允许您通过向jQuery.fn添加属性来扩展其对象。

所以:

$.fn.my_function = function() {
    …
};

您还可以使用 jQuery.fn.extend 扩展具有多个属性的 jQuery 的对象原型。

至于其他库 - 它各不相同!如果他们的对象有一个通用的构造函数,你通常可以将你的方法放在他们的原型上,顺便说一下,这是你的Object示例的问题;您需要将您的方法放在Object.prototype上,以便它成为查找链的一部分。

例如,您自己的示例可以重写为这样(这实际上是"常规"类"的首选):

function Calculator(start) {
    this.start = start;
}
Calculator.prototype.add = function(x) {
    this.start += x;
    return this;
};
Calculator.prototype.multiply = function(x) {
    this.start *= x;
    return this;
};