@oleshkin

Как удалить объект через функцию?

var person = { 
	'firstName': 'Alex',
	'lastName': 'Medvedev',
	'getFullName': function() {
		return person.firstName + ' ' + this.lastName;
	}
}

console.log(person);

// killer functions
var kill = function(obj) { // delete the object - does not work
	delete obj;
}

var kill2 = function(obj) { // replace with an empty object - does not work
	obj = {};
}

var kill3 = function(obj) { // manually delete each object property - works!
	delete obj.firstName;
	delete obj.lastName;
	delete obj.getFullName;h
}

kill(person);
console.log(person);

kill2(person);
console.log(person);

kill3(person);
console.log(person);

Как видно, только вручную можно удалить каждое свойство объекта, но не обнулить весь объект разом. Цели у меня для этого нет, просто изучаю язык. Узнал, что можно вызывать функцию через другую функцию, но удивился, когда не смог обнулить объект.

Есть ли тут good practice решение?

PS: MDN читал:
https://developer.mozilla.org/en-US/docs/Web/JavaS...
  • Вопрос задан
  • 1555 просмотров
Решения вопроса 1
@lem_prod
var kill = function(obj) { // delete the object - does not work
delete obj;
}


вызов kill(obj); удаляет объект, который находится в контексте самой функции проще говоря происходит примерно такое:

есть var a = { ... };

kill(a) /* obj = a; delete obj */ другими словами удаляет клона

var kill2 = function(obj) { // replace with an empty object - does not work
obj = {};
}


здесь объект очищается а не удаляется

вопрос, чем встроенная функция не угодила? что должно происходить? просто delete a;

а если через функцию:

function kill_obj (obj) {
detele window[obj];
}

kill_obj('str_name');
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alsopub
@alsopub
Если просто
delete person;
не устраивает, то возможно
var kill4 = function (str) {
  eval('delete ' + str);
}

kill4('person');
Ответ написан
@MNB
Object.keys(obj).forEach(function(key){
	delete obj[key];
});
Ответ написан
В JS объекты не удаляются вручную, этим занимается сборщик мусора.
Если требуется удалить все перечисляемые свойства из объекта, смотрите ответ от MNB
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы