jQuery.Deferred() - "new"运算符是可选的吗?

gsk*_*lee 5 jquery new-operator jquery-deferred

jQuery如何实现其Deferred对象,以便new运算符是可选的var x = $.Deferred();

ale*_*lex 6

这是实现这一目标的模式......

$.Deferred = function() {
    if ( ! (this instanceof $.Deferred)) {
        return new $.Deferred;
    }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为this在构造函数中设置了新对象.instanceof将告诉您LHS操作数是否在其原型链中具有RHS操作数.如果此条件不成立,则该函数将返回对象的实例化版本.