OOP を使用して別の js ファイル logger.js にロギングを実装するために、次のコードを作成しました。
var console;
function Logger() {
init();
}
var init = function() {
if(!window.console){
console = {
log: function(message){},
info: function(message){},
warn: function(message){},
error: function(message){}
};
} else {
console = window.console;
}
};
Logger.prototype.log = function(message) {
console.log(message);
}
Logger.prototype.logInfo = function(message) {
console.info(message);
}
Logger.prototype.logWarn = function(message) {
console.warn(message);
}
Logger.prototype.logError = function(message) {
console.error(message);
}
別の js ファイル、site.js から次のように使用しています。
var logger = new Logger(); //global variable
var getComponentById = function(id) {
var component = null;
if(id) {
try {
component = AdfPage.PAGE.findComponentByAbsoluteId(id);
}catch(e){
logger.logError(e);
}
}
return component;
}
私は考えていた
Logger
JavaScriptのOOPを維持することにより、クラスを適切な方法で実装した場合。- ブラウザにコンソールがないシナリオを処理できますか?
init()
他のjsファイルまたはメソッドからメソッドにアクセスできないようにするにはどうすればよいですか? どうすれば作れますprivate
か?
どんなポインタでも私にとって非常に役に立ちます。
アップデート
別のSO スレッドから、プライベート メソッドに関する情報を見つけ、アプローチを変更しました。
function Logger() {
init();
}
Logger.prototype = (function() {
var console;
var init = function() {
if(!window.console){
this.console = {
log: function(message){},
info: function(message){},
warn: function(message){},
error: function(message){}
};
} else {
this.console = window.console;
}
};
return {
constructor: Logger,
log: function(message) {
this.console.log(message);
},
logInfo: function(message) {
this.console.info(message);
},
logWarn: function(message) {
this.console.warn(message);
},
logError: function(message) {
this.console.error(message);
}
};
})();
しかし、この場合、init
定義されていないエラーが発生します。