Илиас То есть, потому что это не тот же экземпляр об объекте defer
и объектно promise
, даже они создают из тех же коды ... Каждый раз, когда вы звоните jQuery.Deferred
метод создаст новый объект.
Deferred: function(func) {
// notice, these define is in the Deferred method, every time is whole new object
var tuples = [
// action, add listener, listener list, final state
[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
[ "notify", "progress", jQuery.Callbacks("memory") ]
],
state = "pending",
promise = {
state: function() {
return state;
},
always: function() {
deferred.done(arguments).fail(arguments);
return this;
},
then: function(/* fnDone, fnFail, fnProgress */) {
var fns = arguments;
return jQuery.Deferred(function(newDefer) {
jQuery.each(tuples, function(i, tuple) {
var action = tuple[ 0 ],
fn = jQuery.isFunction(fns[ i ]) && fns[ i ];
// deferred[ done | fail | progress ] for forwarding actions to newDefer
deferred[ tuple[1] ](function() {
var returned = fn && fn.apply(this, arguments);
if (returned && jQuery.isFunction(returned.promise)) {
returned.promise()
.done(newDefer.resolve)
.fail(newDefer.reject)
.progress(newDefer.notify);
} else {
newDefer[ action + "With" ](this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments);
}
});
});
fns = null;
}).promise();
},
// Get a promise for this deferred
// If obj is provided, the promise aspect is added to the object
promise: function(obj) {
return obj != null ? jQuery.extend(obj, promise) : promise;
}
},
deferred = {};
, потому что это другое обещание, другой объект ... или '({})! = ({})' –
Два посыла объекты и в Js двух объектов не равны. – Jai
Я не сравниваю объекты обещания, а сам объект функции. Почему бы не ссылаться на то же место памяти, где находится функциональный объект метода .promise? –