Удалить экземпляр класса?

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

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.

 Steven Wexler21 июн. 2013 г., 22:08
Есть лиdelete this работа для тебя?
 Ian21 июн. 2013 г., 22:31
@VitaliyIsikov Ааа, понятно. Перезаписывая его, следует разыменовать его, и это будет GC 'редактор Ну, если это поможет, вот как яя установил это:jsfiddle.net/fnbc9/2
 Ian21 июн. 2013 г., 22:22
@VitaliyIsikov Я не знаюЯ так не думаю. Попробуйте простой пример на jsFiddle -jsfiddle.net/fnbc9 , Я знаю это'простой пример, но кем ты хочешь быть?удален»? А что ты имеешь в виду под "удалять"? Как яя бы сделал это, установивstop метод наT класс, который вы можете вызвать, чтобы остановить итерацию. Что касается "удаление»Яя не уверен, потому что яя не уверен в этом
 Vitaliy Isikov21 июн. 2013 г., 22:18
@ Да, да. Это должно остановить итерацию, а также удалить. Перезапись window.x остановит итерацию?
 Denys Séguret21 июн. 2013 г., 22:11
Я не уверен, что класс нужен в этом конкретном случае. Если там'Ничего более, чистый функциональный код, вероятно, будет чище.
 Vitaliy Isikov21 июн. 2013 г., 22:26
Удаление на самом деле не нужно, так как глобальная переменная будет перезаписана очень скоро. Это'остановка той итерации, с которой у меня действительно возникла проблема. Спасибо, указав мне в правильном направлении.
 Vitaliy Isikov21 июн. 2013 г., 22:16
Это очень упрощенная версия того, что у меня происходит, поверь мне. Мне нужен класс.
 epascarello21 июн. 2013 г., 22:10
@ стейки, это ничего не сделает
 Ian21 июн. 2013 г., 22:15
О чем ты на самом деле спрашиваешь ...удалять"в переменной (для сбора мусора) или остановки итерации? Вы можете спросить одну вещь (и получить ответы на нее), когда вы действительно хотите сделать что-то другое

Ответы на вопрос(2)

Учебный класс не одинаковые функции разные. Не работает удалить.Учебный класс это модификация системы.

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

Пытаться:

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']

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

Присоединяйтесь к нам;)

Решение Вопроса

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

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

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

x = null;

или же

x = undefined;

или же

delete window.x;

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

 Vitaliy Isikov21 июн. 2013 г., 22:14
Что, если x = new T (); опять же, это будет работать?
 Ian21 июн. 2013 г., 22:13
Вы можете удалить только переменную (x здесь) если этоS объявлен безvar... либо как свойствоwindow или просто безvar :)
 Vitaliy Isikov21 июн. 2013 г., 22:20
В реальном коде класс инициализируется с переменной переменной,window['request_' + request.id] = new T();
 Denys Séguret21 июн. 2013 г., 22:23
Таким образом, вы можете удалить его таким же образом:delete window['request_' + request.id] или же .window['request_' + request.id]=null
 KingRider03 июн. 2016 г., 15:53
удалятьучебный класс не поддерживает команду и простофункция ... попробуйте чистый JavaScript, а не JQuery. Попробуйте ниже опубликованный тест кода urучебный класс
 Ian21 июн. 2013 г., 22:24
@VitaliyIsikov С тобойобъявляя их глобальными свойствами, они не будут собраны GC, если вы не разыграете их (как, например,delete или же= null как дистройпредлагает
 Denys Séguret21 июн. 2013 г., 22:15
@VitaliyIsikov да, это будет работать. Важно не иметь объект, который вы хотите потерять, в качестве значения любой переменной.

Ваш ответ на вопрос