扩展 JavaScript 通用模块(UMD 文件)中定义的类的正确方法是什么?

What is the correct way to extend a class defined in a JavaScript Universal Module (UMD file)

本文关键字:定义 是什么 方法 JavaScript 模块 文件 UMD 扩展      更新时间:2023-09-26

我第一次尝试为log4javascript自定义日志"appender"。它可以工作,但它卡在原始代码中。 我想将我的扩展保存在一个单独的文件中,但我对其余代码的理解不够好,不知道如何提取它。

我知道log4javascript以某种方式尊重UMD模式,但这就是我所得到的。

(虽然不应该是...

function(root, factory){})(this, function{})...

。而不是。。。

function(factory, root){})(function{})

????*)

(function(factory, root) {
    if (typeof define == "function" && define.amd) {
        define(factory);
    }
    else if (typeof module != "undefined" && typeof exports == "object") {
        module.exports = factory();
    }
    else {
        root.log4javascript = factory();
    }
})(function() {
        :
  Here be dragons . . .
        :

    /*  -- -  this code works from here, but not if I    - -- */
    /*  -- -  try to move it out to a file of its own    - -- */    
    function MyAppender() {}
    MyAppender.prototype = new Appender();
    MyAppender.prototype.layout = new SimpleLayout();
    MyAppender.prototype.append = function(loggingEvent) {
      alert( this.getLayout().formatWithException(loggingEvent) );
    };
    MyAppender.prototype.toString = function() {
      return "MyAppender";
    };
    log4javascript.MyAppender = MyAppender;
    /*  -- -      -   -   -   -   -   -   -   -   -      - -- */    

        :
 . . . and sea monsters
        :

    return log4javascript;
}, this);

如何在单独的文件中对追加器进行子类化?

自从几个小时前发布以来,我一直在阅读更多关于UMD,AMD,requireJS等的信息。

主要问题是名称空间的纯度,似乎。

想通了这一点,我所要做的就是解决命名空间问题。 事实证明,这非常简单:它就在代码中!咄!:

log4javascript.MyAppender = MyAppender;

而不是。。。

MyAppender.prototype = new Appender();
MyAppender.prototype.layout = new SimpleLayout();

。 我只需要做...

MyAppender.prototype = new log4javascript.Appender();
MyAppender.prototype.layout = new log4javascript.SimpleLayout();