Я пытаюсь обернуть голову вокруг организации своего кода. У меня есть несколько модулей в моем проекте, которые я бы хотел организовать.
Дело в том, что все, что пришло мне в голову, не сработало. В настоящее время я думаю о четырех идеях:
Простой объект - бесполезен из-за проблем с областями видимости. Использование this.a
будет работать, но this
имеет различное значение в зависимости от того, кто его назвал, поэтому оно ненадежно. Например, я однажды назначил функцию классу WebSocket
, но внезапно this
сослался на экземпляр WebSocket
, когда функция была вызвана событием WebSocket
. Я мог бы использовать bind(foo)
каждый раз, когда вызываю функцию, но, наверное, должен быть другой способ.
var foo = {
a: 3,
s: function() {
alert(a); // a doesn't exist in this scope
alert(this.a); // 'this' isn't always foo
alert(foo.a); // I would have to put 'foo.' before each variable
// reference, but I'm sure that's not the way to do it
}
};
Экземпляр - a
не определен. Опять же, this
не надежно.
var foo = function() {
this.a = 3;
this.s = function() {
alert(a);
};
};
var foo_instance = new foo();
foo_instance.a = 4;
foo_instance.s(); // Error: a is not defined
Закрытие экземпляром - ничего не возвращает; остается undefined
.
var foo = (function() {
this.a = 3;
this.s = function() {
alert(a);
};
})();
// foo === undefined
Закрытие с помощью метода получения / установки - Прекрасно работает в Chrome, однако IE не поддерживает методы получения / установки.
var foo = (function() {
var a = 3;
return {
get a() { return a; },
set a(v) { a = v; },
s: function() {
alert(a); // Doesn't work in IE as getters/setters are
// not supported
}
};
})();
Как мне эффективно организовать свои модули, чтобы я мог получить доступ к свойствам безопасным и кросс-браузерным способом?
Спасибо.