2017-02-02 7 views
0

Есть ли способ удалить объект из его метода.Есть ли способ удалить или свернуть объект JavaScript из метода объекта?

Позвольте мне объяснить немного тщательно. У меня есть класс JS под названием «Тест», и я создаю новый экземпляр этого класса и назначаю его переменной, как показано ниже.

var Test = function() 
{ 

} 

Test.prototype = 
{ 
    printLog: function() 
    { 
     // Print some values 
    }, 

    destroy: function() 
    { 
     //Here I want to delete **this** Test object. 
    } 
} 

var a = new Test(); 

Теперь я хочу, чтобы удалить вновь созданный объект класса Test, который назначен в переменной , вызывая a.destroy, как показано ниже.

a.destroy(); 
console.log(a); //It should print null instead on object code. 

После вызова метода уничтожения(), переменная значение должно быть напечатано как нуля в логе консоли.

+0

Вы пытались присвоить значение 'null' элементу (' this = null; ')? Может быть, я говорю глупо, но мне интересно, работает ли это или нет. – AymDev

+1

Это не присвоение левой руки недействительным. Он работает только в том случае, если вы пропустите его. – Shilly

+1

EcmaScript 6 вообще не указывает семантику сбора мусора, поэтому ничего подобного не происходит. Источник: http://stackoverflow.com/questions/29333017/ecmascript-6-class-destructor – Robert

ответ

0

Почему бы вам просто не написать a = null; вместо a.destroy(); ??

Внутри вашего метода уничтожения вы не можете использовать delete this, потому что this - это не свойство, а объект. И похоже, что вы не можете написать this = null;. Но, как я уже сказал, я действительно не думаю, что вам нужен метод для создания вашего объекта null.

+0

Спасибо за ваш ответ. На самом деле я создаю компонент (пример окна java-скрипта). Когда пользователь закрывает окно, вызывается метод close(), откуда я должен аннулировать объект. – Kather

0

Один из способов использования метода уничтожения - использование пространства имен И путем hardcoding имя переменной и отправка как параметров разрушать. Но имхо, это усложняет ситуацию. Поэтому var a = null; - мое предпочтительное решение;

Но если вы выберете подход destroy(), вероятно, лучше иметь метод destroy в пространстве имен, а не в прототипе класса.

var Test = function() { 

}; 
Test.prototype = { 
    printLog: function() { 
     // Print some values 
    }, 

    destroy: function(namespace, instanceName) { 
     namespace[instanceName] = null; 
    } 
}; 
var instances = { 
    'a' : new Test() 
}; 
console.log(instances); 
instances.a.destroy(instances, 'a'); 
console.log(instances); 

/////////////////////////// 

var Test = function() {}; 
Test.prototype = { 
    printLog: function() { 
     // Print some values 
    } 
}; 
var Namespace = function() {}; 
Namespace.prototype = { 
    'add' : function(name, obj) { 
     this[name] = obj; 
    }, 
    'destroy' : function(name) { 
     delete this[name]; 
    } 
}; 
var ns = new Namespace(); 
ns.add('a', new Test()); 
console.log(ns); 
ns.destroy('a'); 
console.log(ns); 

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

  • Нет связанных вопросов^_^