Реализация метода dispose может приводить к некоторым неочевидным ошибкам при его использовании.
Например, при разработке собственного компонента, который имеет три свойства, задаваемые извне:
PP.Ui.MyButton = function (settings)
{
this._ImageList = null;
this._Metabase = null;
this._Source = null;
PP.Ui.Control.call(this, settings);
};
PP.initClass(PP.Ui.MyButton, PP.Ui.Control, "Button");
Далее пример использования созданного компонента:
var imgList = new PP.ImageList({ Source: "Icon.png" });
var source = new PP.Exp.EaxAnalyzer();
var mb = new PP.Mb.Metabase();
var btn = new PP.Ui.MyButton({
ImageList: imgList,
Source: source,
Metabase: mb
});
btn.dispose();
После выполнения примера и вызова метода dispose у кнопки, объектам source, imgList и mb также будет вызван метод dispose. Но так как эти свойства задаются извне и создаются вне кнопки, то это является ошибкой. Поэтому для свойств, значения которых являются ссылками на объекты типа PP.Object и задаются извне, нельзя вызывать dispose внутри класса-пользователя этих объектов.
В классе MyButton необходимо переопределить базовый метод dispose следующим образом:
PP.Ui.MyButton.prototype.dispose = function ()
{
delete this._ImageList;
delete this._Metabase;
delete this._Source;
PP.Ui.Control.dispose.apply(this, arguments);
};
Примечание. В переопределённом методе обязательно необходимо вызвать dispose базового класса.
Теперь внешним объектам метод dispose вызван не будет.
См. также: