gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:40:47 25 4
gpt4 key购买 nike

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

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

Cannot find function error in object function log(currentFunction, logMessage)

有谁知道这是为什么吗?为了保持代码整洁,我真的希望能够将所有内容都放在一个函数中,但此时看来我可能必须将所有内容分开,如上面的第一个代码块所示。

编辑 - 我的解决方案

感谢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 函数由您将其附加到原型(prototype)的 log 的所有实例共享。

MDN 有 a document about the object model in javascript .

关于javascript - 如何使用方法创建自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com