Любой способ проверить, является ли переменная реальной jqXHR?

Как уже упоминалось в заголовке, существует ли способ проверить, является ли переменная реальной jqXHR?

Я имею в виду (мнимый):

var resource = $.get('/resource');

if (resource instanceof jqXHR)
{
    // do something
}

Фактическая проблема, которую я пытаюсь решить, для модального плагина, над которым я работаю.

$('#element').modal({
    content : function()
    {
        return $.get('/resource');
    }
});

И переменная content может быть либо string, либо function. В случае string он будет статическим, в случае function он будет запускаться каждый раз при открытии модального файла.

Но я хочу, чтобы обратный вызов content возвращал либо jqXHR, либо string. С строкой это довольно просто, if (typeof returned === 'string'), но как насчет jqXHR?

Я знаю, что я мог бы просто проверить string и в случае, если это не string, предположим, что он jqXHR, но я хочу, чтобы мой плагин был как можно сильнее, и запретил работу с неожиданными типами.

Ответ 1

Я предлагаю просто проверить, является ли он объектом обещания. Это сделает ваш код более надежным, поскольку пользователь может вернуть пользовательский отложенный объект, если ему нужно сделать что-то более сложное или просто вернуть jqXHR для того же эффекта.

if ($.type(resource) === "string") {
    doStuff(resource);
} elseif (resource && resource.promise) {
    resource.promise().done(doStuff);
}