Это мой код:Почему мой объект объекта Javascript инициализируется onThen перед конструктором?
SLVD.promise = function() {
delete this.data;
delete this.callBack;
delete this.babyPromise;
};
SLVD.promise.prototype.then = function(callBack) {
if(this.data) {
return callBack(this.data);
}
else {
this.callBack = callBack;
this.babyPromise = new SLVD.promise();
return this.babyPromise;
}
};
SLVD.promise.prototype.resolve = function(data) {
if(this.callBack) {
var tPromise = this.callBack(data);
if(this.babyPromise) {
if(!(tPromise instanceof SLVD.promise)) {
this.babyPromise.resolve(tPromise);
}
else if(tPromise.data) {
this.babyPromise.resolve(tPromise.data);
}
else {
tPromise.callBack = this.babyPromise.callBack;
if(this.babyPromise.babyPromise) {
tPromise.babyPromise = this.babyPromise.babyPromise;
}
}
}
}
else {
this.data = data;
}
};
SLVD.promise.as = function(data) {
var promise = new SLVD.promise();
promise.resolve(data);
return promise;
};
Это система обещание. (Да, я знаю, что там уже есть системы обещаний. Пожалуйста, не жудьте меня на этом.) Однако при запуске конструктора член callBack уже установлен на «onThen (value)». И когда я пытаюсь удалить его в конструкторе, как показано ниже, он все еще делает это. Кто-нибудь знает что-нибудь об этом?
Другая потенциально полезная информация:
- Вызов конструктора новый SLVD.promise();
- Я дал полное определение класса. Наследования нет, и у меня нет других скрытых свойств прототипа.
- Я выполнил поиск в файлах в блокноте ++ для onThen; Я определенно никогда не использовал это имя.
- Я запускаю это в Firefox.
- Я пробовал переименовать callBack на странные вещи, если это было зарезервированное слово, но это не помогло.
Это изображение показывает код паузу в отладчике на линии после того, как я зову удалить в конструкторе ...
EDIT: В этом отношении, this.babyPromise также предопределены ... (даже после удаления). Зачем?
Не используйте delete, это замедляет все. Вместо этого измените значение на null или 0 или на пустую строку или что-нибудь ложное. – colecmc
Это не проблема. В вызове конструктора ничего не должно быть предопределено. – nyttimangus
Пожалуйста, покажите нам, как вы называете этот код и как он используется, поскольку это, вероятно, ключ к пониманию вашей проблемы. Например, вы всегда создаете новый объект или повторно используете один и тот же объект? – jfriend00