Как удалить объект в Javascript Crossbrowser - PullRequest
1 голос
/ 22 июля 2011
var obj = {
    destroy: function(){this = null;}
};

obj.destroy();

Это работает в Chrome, однако firefox выдает ошибку, ссылающуюся на это по какой-то причине. Есть ли лучший способ убить этот объект в методе?

Ошибка:

invalid assignment left-hand side
[Break On This Error] destroy: function(){this = null;} 

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

Не уверен, почему в Chrome это разрешено, но вы не можете присвоить этому значение.Вы можете ссылаться на это, но вы не можете присвоить ему значение.

Если у вас есть какое-то уничтожение массива, которое вы хотите выполнить, вы можете ссылаться на this.myArrayName в вашем методе destroy и освободить все, что вы пытаетесьдля освобождения, но вы не можете просто присвоить ему значение NULL, чтобы уничтожить экземпляр.

Я полагаю, вы можете попробовать что-то вроде этого:

var foo = {
    // will nullify all properties/methods of foo on dispose
    dispose: function () { for (var key in this) this[key] = null; }
}

foo.dispose();

Почти так близко, как вы можете получитьюридически аннулировать "это" ...

Счастливое кодирование.

B

2 голосов
/ 22 июля 2011

Позвони мне по-старому, но:

foo = null;
0 голосов
/ 22 июля 2011

Я не уверен, почему вы делаете это сложно. Javascript - это язык для сборки мусора. Все, что вам нужно сделать, чтобы что-то освободить, - это убедиться, что на него больше нет ссылок.

Итак, если вы начнете с:

var obj = {
    data: "foo";
};

и теперь вы хотите избавиться или «освободить» этот объект, все, что вам нужно сделать, это очистить ссылку на него:

obj = null;

Поскольку в вашем коде больше нет ссылок на ту структуру данных, которую вы изначально определили и присвоили obj, сборщик мусора освободит ее.

Объект не может уничтожить себя (потому что другие вещи могут иметь ссылки на него). Вы разрешаете его освобождение, удаляя все ссылки на него. Объект может очистить свои собственные ссылки на другие вещи, хотя это обычно не требуется, так как удаление всех ссылок на сам объект также позаботится о ссылках, которые он содержит (за исключением некоторых ошибок с циклическими ссылками между JS и DOM в некоторых старых браузерах - в частности, в IE).

Один раз, когда вы можете явно «удалить» что-то, это если у вас есть свойство объекта, который вы хотите удалить. Итак, если у вас есть:

var obj = {
    data: "foo",
    count: 4
};

И вы хотите удалить свойство «data», вы можете сделать это с помощью:

delete obj.data;

из, если свойство / ключ были назначены программно через переменную, подобную этой:

var key = "xxx";
obj[key] = "foo";

вы можете удалить этот ключ с помощью:

delete obj[key];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...