【问题标题】:Extending $.fn.init function扩展 $.fn.init 函数
【发布时间】:2012-06-24 04:26:06
【问题描述】:

我正在尝试使用以下内容扩展 jQuery:

$.fn.extend({
    initCore:   $.fn.init,
    init:       function (selector, context, rootjQuery) {
        return $.fn.initCore(selector, context, rootjQuery);
    }
}),

但是,它似乎无法正常工作,并且创建简单的东西(例如点击警报)会产生错误。谁能发现问题?

提前致谢!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    $.fn.init 是类构造函数本身。

    尝试添加$.fn.init.prototype = $.fn 后缀以恢复原始原型。

    【讨论】:

    • 是的,但即使那样你也不能使用return $.fn.initCore(...)
    • 它似乎有效。不过,我已经对 fn 对象进行了原型设计,因此 initCore 将始终在那里运行,并且我正在传递原始参数。确定这就是所有需要的吗?
    • 哦,对不起,我明白你的意思了。我已经将 $.fn 更改为 this.fn 以使其正常工作!
    【解决方案2】:

    我猜你错过了上下文。试试

    return $.fn.initCore.call(this, selector, context, rootjQuery);
    

    甚至更简单

    return this.initCore(selector, context, rootjQuery);
    

    不,等等,init 是构造函数本身。这意味着

    $.fn.initCore.call(this, selector, context, rootjQuery);
    doSomeThingWith(this);
    
    ...
    
    $.fn.init.prototype = $.fn;
    

    var ob = new $.fn.initCore(selector, context, rootjQuery);
    doSomeThingWith(ob);
    return ob;
    

    【讨论】:

    • 我通过输入 $.fn.init.prototype = $.fn 来修复它 :) 谢谢!
    • 我不认为仅此而已。你仍然在没有上下文的情况下调用$.fn.initCore,这将导致严重的错误。
    猜你喜欢
    • 2018-09-24
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多