我编写了以下代码,通过使用 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
未定义的错误。