扩展jQuery.fn.method

时间:2015-03-06 16:58:36

标签: javascript jquery

有可能吗?

例如:

jQuery.fn.data.toNumber = function(attr) {
    return Number(this.attr("data-" + attr));
    // Where "this" mean each DOMElement.
}

所以我可以这样称呼:

var number = $(document.body).data.toNumber("value");
// Act like: Number($(document.body).attr("data-value"))

1 个答案:

答案 0 :(得分:4)

以这种方式不能(合理地*),因为this在调用期间不会引用jQuery实例(它将引用data功能)。

您可能会考虑使用更标准的插件方法,例如:

jQuery.fn.dataAsNumber = function(attr, value) {
    if (typeof value !== "undefined") {
        // Setter
        this.data(attr, value);
        return this;
    }

    // Getter
    return +this.data(attr);
};

用法:

var number = $(document.body).dataAsNumber("value");

*好的,只是为了完整性:它是可能的,但不合理。您必须破解jQuery.fn.init才能使其正常运行。我强烈建议不要这样做。