2013-06-21 2 views
15

У меня есть класс, который был создан как это:Удалить экземпляр класса?

function T() { 
    this.run = function() { 
     if (typeof this.i === 'undefined') 
      this.i = 0; 
     if (this.i > 10) { 
      // Destroy this instance 
     } 
     else { 
      var t = this; 
      this.i++; 
      setTimeout(function() { 
       t.run(); 
      }, 1000); 
     } 
    } 
} 

Тогда я инициализировать его как var x = new T();

я не уверен, как уничтожить этот экземпляр внутри себя один раз, если достигает 10 итераций.

Кроме того, я не знаю, как уничтожить его извне либо, в случае, если я хочу, чтобы остановить его, прежде чем он достигнет 10

+1

Does 'delete this' work for you? –

+2

@steaks, который ничего не сделает – epascarello

+0

Я не уверен, что класс необходим в этом конкретном случае. Если нет ничего более, чистый функциональный код, вероятно, будет более чистым. –

ответ

21

Чтобы удалить экземпляр, в JavaScript, вы удалите все ссылки, указывающие на него, так что сборщик мусора может вернуть его.

Это означает, что вы должны знать переменные, содержащие эти ссылки.

Если вы только что назначили его переменной x, вы можете сделать

x = null; 

или

x = undefined; 

или

delete window.x; 

но последний, как и уточнено Яном, может работать, только если вы определили x как явное свойство window.

+1

Вы можете удалить переменную ('x' здесь), если она объявлена ​​без' var' ... либо как свойство 'window', либо просто без' var' :) – Ian

+0

Что делать, если x = new T(); опять же, это тоже сработает? –

+0

@VitaliyIsikov да, это сработало бы. Важно не иметь объект, который вы хотите потерять как значение любой переменной. –

2

Класс не такая же функция отличается. Не работает удаление. Класс - системная модификация.

class SAFunc { 
    method1(){ 
    console.log("1"); 
    } 
    method2(){ 
    console.log("2"); 
    } 
} 
let func = new SAFunc(); 
func['method2']() 

Try:

  • delete window['func'] - не работает
  • delete eval['func'] - не работает
  • delete window['SAFunc'] - не работает
  • ...
  • ...

Функция - команда работы удалить

method1 = function(){ 
    console.log("func1"); 
} 
function method2() { 
    console.log("func2"); 
} 
var SAFunc = { method3: function() { console.log("func3"); } } 

сделать ур тест ... Попробуйте:

  • delete window['method1']
  • delete window['method2']
  • delete SAFunc['method3']

Хорошо, весело!я люблю программирование

Enjoin us;)