如何使用方法创建自定义类
How to create custom class with methods
我正在尝试创建自己的类来将错误和消息记录到数据库中,但我不熟悉在 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");
- DataTables-创建自定义分页样式(加载更多样式)
- 如何在javascript中创建自定义事件
- 在angularjs中创建自定义控件的推荐方法
- 创建自定义函数以在函数上运行完整的多选下拉列表
- 使用自定义记号创建可缩放的Y轴
- 遍历SC.ManyArrray以创建要附加到SproutCore中的另一个视图的自定义视图
- 单击或取消选中复选框时,如何创建弹出的自定义窗口
- 为自定义网站创建JavaScript搜索框,创建显示搜索结果的弹出窗口
- 在jquery和javascript中创建自定义日历背后的逻辑
- Magento创建自定义的职业表格,并从CMS页面调用
- 如何为javascript创建自定义标签?或者这是我不知道的其他事情吗;我不知道
- 如何创建自定义属性以添加if.bind
- 自定义筛选器不'我不使用django数据表视图创建的ajax.data.Json
- 创建自定义URL
- 在 Backbone.js 中创建自定义“同步”方法
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 如何使用引导程序创建自定义滚动条
- 自定义创建的谷歌地图嵌入
- 通过续集保存自定义创建的对象
- 在自定义创建的按钮中隐藏HTML javascript代码