我正在尝试创建自己的类来记录错误和消息到数据库,但我不熟悉在Javascript中创建自定义类和方法。经过大量的研究,我能够将以下代码组合在一起:
function log ()
{
}
log.error = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Error");
}
我可以通过以下方式成功调用log.error
函数:
log.error("current function name", "this is my error message");
我的问题是这样的:我看过的大多数网站都说这样组织你的代码:
function log ()
{
this.error = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Error");
}
}
但每当我尝试调用该错误函数时,我都会收到以下错误:
在对象函数日志(currentFunction,logMessage)中找不到函数错误
有谁知道这是为什么?为了保持我的代码干净,我真的希望能够将所有内容放在一个函数中,但在这一点上看起来我可能必须将所有内容分开,就像在上面的第一个代码块中一样。
编辑 - 我的解决方案
感谢破坏和何塞维加(对不起何塞,我没有足够的声誉来对你的答案进行投票)。我最终使用了dystroy的解决方案,因为我觉得将来我更容易维护我的代码,但是Jose的回答让我深入了解了我想要做的事情以及我可以使用的不同选项。当我做var objectName = {}
vs function className () {}
之类的事情时,我觉得自己能够更好地掌握正在发生的事情。
这是我的新代码:
function log ()
{
log.prototype.error = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Error");
}
log.prototype.warning = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Warning");
}
log.prototype.info = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Info");
}
function createLog (currentFunction, logMessage, messageType)
{
//code that updates MSSQL database
}
}
答案 0 :(得分:3)
你根本就没有使用类,你调用它时,你的第一个名为log
的函数完全没用。
你可以把它写成
var log = {}
log.error = function (currentFunction, logMessage){
createLog (currentFunction, logMessage, "Error");
}
通常,当您创建一个新函数并希望将其视为一个类时,您会这样做:
function log () {
}
log.prototype.error = function (currentFunction, logMessage) {
createLog (currentFunction, logMessage, "Error");
}
然后你可以像这样使用它:
(new log()).error("current function name", "this is my error message");
这看起来有点像你的第二个例子,除了error
函数由你将它附加到原型的所有log
实例共享。
答案 1 :(得分:0)
我认为这是组织日志“class”的最佳方式,然后你可以根据需要警告函数和信息功能。
var log = {
error : function(currentFunction, logMessage) {
createLog(currentFunction, logMessage, "Error");
},
warn : function() {
},
info : function() {
}
}
答案 2 :(得分:0)
你可以这样写:
var log = {
error: function (currentFunction, logMessage) {
createLog (currentFunction, logMessage, "Error");
}
};
然后这样称呼:
log.error("My function", "Is not working");
虽然我通常使用jQuery以下列方式编写它:
(function($) {
//Declare object
var _this = $.Log = new function () {
};
//Apply variables and methods
$.extend(_this, {
error: function (currentFunction, logMessage) {
createLog (currentFunction, logMessage, "Error");
}
});
)(jQuery);
稍后会这样调用:
$.Log.error("My function", "Is not working");
答案 3 :(得分:0)
找不到error()函数的原因是因为它在日志对象的构造函数中--log()函数是构造函数。这就是你如何在Javascript中创建私有成员,将它们放在构造函数中。要使您的error()函数可见,您需要将它附加到日志对象的原型,就像这样。
function log ()
{
log.prototype.error = function (currentFunction, logMessage)
{
createLog (currentFunction, logMessage, "Error");
}
}
现在你可以这样称呼它:
var myLog = new log();
myLog.error("current function name", "this is my error message");
有关javascript中解释公共,私人和受保护成员的好文章,请阅读以下文章:http://javascript.crockford.com/private.html。