2015-07-04 2 views
0

Это мой код:Почему мой объект объекта 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 на странные вещи, если это было зарезервированное слово, но это не помогло.

Это изображение показывает код паузу в отладчике на линии после того, как я зову удалить в конструкторе ... Weird error

EDIT: В этом отношении, this.babyPromise также предопределены ... (даже после удаления). Зачем?

+1

Не используйте delete, это замедляет все. Вместо этого измените значение на null или 0 или на пустую строку или что-нибудь ложное. – colecmc

+0

Это не проблема. В вызове конструктора ничего не должно быть предопределено. – nyttimangus

+0

Пожалуйста, покажите нам, как вы называете этот код и как он используется, поскольку это, вероятно, ключ к пониманию вашей проблемы. Например, вы всегда создаете новый объект или повторно используете один и тот же объект? – jfriend00

ответ

0

Как я уже говорил в комментариях, проблема оказалась проблемой с Firebug (v 2.0.11). Я перешел на использование Chrome и его отладчика, и с тех пор у меня не было таких проблем.

Смежные вопросы