JavaScript アプリケーションに一般的な機能をプログラムする方法についての推奨事項が必要です。たとえば、Main、Logger、App、および Template というクラスがあります。
Main は App と Logger のインスタンスを作成し、App は Template のインスタンスを作成します。Main は自分自身の参照をアプリの init に渡し、アプリは Main の参照を Template の init に渡します。ここで、善悪を問わず、Template は Main 内の Logger インスタンスへの直接参照を持っています。これは最も単純ですが、ロガーを変更すると、参照を呼び出すすべてのクラスを再プログラミングする必要があるため、適切な OOP とは思えません。
あるいは、Template は、Logger のインスタンスを呼び出すメソッドを持つ Main への参照を呼び出すメソッドを持つ App への参照のみを受け取ることができます。これは、全員を寄せ付けないという点ではより安全に思えますが、Logger やそれが管理する他のクラスにアクセスするためのメソッドで Main がいっぱいになることも意味します。
ここでは詳しく説明しません: 私は John Resig の Simple JavaScript Inheritance と RequireJS を使用しています。
例 1:
var Main = {
init: function() {
this.logger = new Logger();
this.app = new App(this);
}
}
var Logger = {
debug: function(message) {
console.log(message)
}
}
var App = {
init: function(main) {
this.template = new Template(main);
}
}
var Template = {
init: function(main) {
main.logger.debug("Hello");
}
}
例 2:
var Main = {
init: function() {
this.logger = new Logger();
this.app = new App(this);
}
,debug: function(message) {
this.logger.debug(message);
}
}
var Logger = {
debug: function(message) {
console.log(message);
}
}
var App = {
init: function(main) {
this.main = main;
this.template = new Template(this);
}
,debug: function(message) {
this.main.debug(message);
}
}
var Template = {
init: function(app) {
app.debug("Hello");
}
}