Я использую простой ООП Джона Ресига Class
, который приспособлен для использования «строгого использования» и взято с SO post.
Во всех примерах, которые я вижу использование Class.extend
так:Простой JavaScript ООП класс
var MyObj = Class.extend({
init:function(){},
prop: "Property"
});
Но я нашел большой недостаток для меня, чтобы использовать его таким образом - я не могу иметь «частные» переменные, так что я не могу хранить ссылку на this
как var $this = this;
. Я нашел решение для моего случая, и теперь я с помощью Class.extend
в следующим образом:
var MyObj = Class.extend(new function(){
var $this = this;
this.init = function(){};
this.prop = "Property";
});
Все работает в моем случае, но я хочу знать, если есть некоторые вещи, которые могут причинить мне проблемы в долгосрочной перспективе ?
В этом случае мое приложение будет потреблять гораздо больше памяти в браузере?
Какие альтернативные способы я должен реализовать своими потребностями?
Примечание: Мне нужно хранить $ это, потому что я использую в значительной степени события и обратные вызовы, поэтому я хочу передать «оригинальный» this
легко иметь доступ ко всем методам и свойствам на объекте.
EDIT: В соответствии с просьбой, это мой пример кода:
(function() {
"use strict";
window.QuickPlay = Class.extend(new function() {
var $this = this;
this.init = function (initData) {
$this.elementsToHide.push(initData.el);
$(function() {
playProcessStart();
Sys.Application.add_load(function() {
$find("ctl00_ContentPlaceHolderMain_ctrlPlayPopup1").add_closed(function() { $this.setElementsVisibility(""); });
});
$this.setElementsVisibility("hidden");
});
};
this.elementsToHide = [];
this.setElementsVisibility = function (visibility) {
$.each($this.elementsToHide, function (i) {
$("#" + this).css("visibility", visibility);
});
};
});
}());
Ouch, no. Я вряд ли могу поверить, что это действительно работает для вас. Пожалуйста, покажите нам, как вы используете этот «класс» с событиями и обратными вызовами; возможно, разместите свой фактический код (по крайней мере, методы, которые включают '$ this'). – Bergi
@ Bergi я добавил пример - это действительно работает, код уже прошел этап QA :) –
Внутри любого объекта вы должны иметь возможность получить доступ к 'this', который будет привязан к текущему объекту. – travis