如何使用方法创建自定义类

How to create custom class with methods

本文关键字:自定义 创建 使用方法      更新时间:2023-09-26

我正在尝试创建自己的类来将错误和消息记录到数据库中,但我不熟悉在 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");
        }
    }

但是每当我尝试调用该错误函数时,都会收到以下错误:

在对象函数日志中找不到函数错误(当前函数,日志消息)

有谁知道这是为什么?为了保持我的代码干净,我真的很希望能够将所有内容放在一个函数中,但此时看起来我可能不得不将所有内容分开,就像上面的第一个代码块一样。

编辑 - 我的解决方案

感谢dystroy和Jose Vega(对不起Jose,我没有足够的声誉来投票给你的答案)。我最终使用了dystroy的解决方案,仅仅是因为我觉得将来维护我的代码会更容易,但是Jose的回答帮助我深入了解了我想要做什么以及我可用的不同选项。我觉得当你做var objectName = {}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
        }
    }

你根本没有使用类,你第一个叫做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附加到原型的所有实例共享。

MDN 有一个关于 javascript 中的对象模型的文档。

我认为这将是

组织日志"类"的最佳方式,如果需要,您可以执行警告功能和信息功能。

var log = {
     error : function(currentFunction, logMessage) {
          createLog(currentFunction, logMessage, "Error");
     },
     warn : function() {
     },
     info : function() {
     }
}
找不到

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。

你可以这样写:

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");