Где у меня идёт утечка памяти?
Здравствуйте. Вот такой пример:
function Example(){
this.name;
this.container_name_selector = "";
}
Example.prototype.init = function(name, container_name_selector, selector_button){
var self = this;
self.name = name;
self.container_name_selector = container_name_selector;
$("."+selector_button).on("click", {self: self}, self.eventClickButton);
}
Example.prototype.eventClickButton = function(e){
var self = e.data.self;
$("."+self.container_name_selector).text(self.name);
return false;
}
Примечание: зачем я передаю self в событие click: если я не пепередам экземпляр класса, то я не знаю как потом в функции eventClickButton() обратится к свойствам класса Example. При каждом событии click растёт память в браузере. Где я ошибаюсь? |
Не знаю где память течет, но разве так не будет работать?
function Example() {
this.name;
this.container_name_selector = "";
}
Example.prototype.init = function(name, container_name_selector, selector_button) {
this.name = name;
this.container_name_selector = container_name_selector;
$("." + selector_button).on("click", this.eventClickButton.bind(this));
}
Example.prototype.eventClickButton = function(e) {
e.preventDefault();
$("." + this.container_name_selector).text(this.name);
}
|
|
Цитата:
|
Крутил коды по варианту ТС и Nexus, и вот такой ужатый (в т.ч. без self с bind(this))
Память растет на первых двух кликах. Сбор мусора в хроме ничего не дает. Почему двух?? (в примере здесь замеры немножко нерегулярно прыгают)
<div class='div_class'></div>
<button class = 'but_class'>Click</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
function Example(){
this.name;
this.container_name_selector = "";
self = this;
this.eventClickButton = function(e, attribute){
$("."+self.container_name_selector).text(self.name);
};
this.init = function(name, container_name_selector, selector_button){
this.name = name;
this.container_name_selector = container_name_selector;
$("."+selector_button).on("click", this.eventClickButton);
};
};
var Test = new Example();
Test.init('Test','div_class','but_class');
</script>
|
Если хотите хорошую производительность - забудьте про jQuery.
|
| Часовой пояс GMT +3, время: 04:46. |