Может ли объект автоматически удалить себя в javascript, как только он достиг своей цели? - PullRequest
43 голосов
/ 21 февраля 2010

Мне интересно, возможно ли для объекта в javascript удалить себя, как только он завершит свою задачу.

Например, у меня есть следующий объект ...

var myObject = Object.create(baseObject);
myObject.init = function() {
  /* do some stuff... */
   delete this;
};
myObject.init();

Это работает? Если нет, есть ли другой способ?

Ответы [ 3 ]

49 голосов
/ 21 февраля 2010

Это не сработает, во-первых, потому что значение this, связанное с контекстом выполнения, равно immutable .

Теперь вы можете подумать, что удаление myObject (delete myObject;) может сработать, но это также не сработает.

Переменные на самом деле являются свойствами Переменного объекта , этот объект недоступен для кода, он находится прямо перед цепочкой областей действия , где вы делаете объявления переменных.

Оператор Variable создает эти свойства с атрибутом { DontDelete }, что приводит к сбою оператора delete.

Опция, если вы хотите добиться этого, - обнулить ваш myObject экземпляр, но это не гарантирует, что другая ссылка все еще указывает на этот объект.

Рекомендуемые лекции:

12 голосов
/ 21 февраля 2010

Нет. this - это просто локальная ссылка на объект, поэтому удаление его не приводит к тому, что объект не существует. Для объекта не существует способа самоуничтожения таким образом. Если у вас есть крупные объекты, которые, по вашему мнению, следует стереть впоследствии, вам следует рассмотреть использование шаблонов «Фасад» или «Стратегия».

5 голосов
/ 29 июля 2012

Вы можете попробовать

window.namespace.myObject = Object.create(baseObject);

namespace.myObject.init = function() {

   /* do some stuff... */

   delete window.namespace.myObject;

}

namespace.myObject.init();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...