【发布时间】:2013-07-14 16:58:02
【问题描述】:
我编写了以下代码,通过使用 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;
}
我想知道
- 如果我通过维护 JavaScript 的 OOP 以适当的方式实现了
Logger类。 - 它会处理浏览器没有任何控制台的场景吗?
- 如何使
init()方法无法从其他js 文件或方法访问?我的意思是我怎样才能做到private?
任何指针都会对我很有帮助。
更新
从另一个SO thread我找到了关于私有方法的信息,我改变了我的方法:
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 未定义的错误。
【问题讨论】:
-
"在一个单独的 JS 文件中.." 听起来你是在说你实际上是通过 JS 将日志条目提交到一个 JS 文件中
-
将“console”的所有实例重命名为“console2”等其他名称,以测试未定义的浏览器行为
标签: javascript oop