6

OOP を使用して別の js ファイル logger.js にロギングを実装するために、次のコードを作成しました。

var console;

function Logger() {
    init();
}

var init = function() {
    if(!window.console){ 
        console = {
            log: function(message){},
            info: function(message){},
            warn: function(message){},
            error: function(message){}
        }; 
    } else {
        console = window.console;
    }
};

Logger.prototype.log = function(message) {
    console.log(message);    
}

Logger.prototype.logInfo = function(message) {
    console.info(message);
}

Logger.prototype.logWarn = function(message) {
    console.warn(message);
}

Logger.prototype.logError = function(message) {
    console.error(message);
}

別の js ファイル、site.js から次のように使用しています。

var logger = new Logger(); //global variable

var getComponentById = function(id) {
    var component = null;

    if(id) {
        try {
            component = AdfPage.PAGE.findComponentByAbsoluteId(id);
        }catch(e){
            logger.logError(e);
        }
    }

    return component;
}

私は考えていた

  • LoggerJavaScriptのOOPを維持することにより、クラスを適切な方法で実装した場合。
  • ブラウザにコンソールがないシナリオを処理できますか?
  • init()他のjsファイルまたはメソッドからメソッドにアクセスできないようにするにはどうすればよいですか? どうすれば作れますprivateか?

どんなポインタでも私にとって非常に役に立ちます。

アップデート

別のSO スレッドから、プライベート メソッドに関する情報を見つけ、アプローチを変更しました。

function Logger() {
    init();
}

Logger.prototype = (function() {
    var console;

    var init = function() {
        if(!window.console){ 
            this.console = {
                log: function(message){},
                info: function(message){},
                warn: function(message){},
                error: function(message){}
            }; 
        } else {
            this.console = window.console;
        }
    };

    return {
        constructor: Logger,

        log: function(message) {
            this.console.log(message);    
        },

        logInfo: function(message) {
            this.console.info(message);
        },

        logWarn: function(message) {
            this.console.warn(message);
        },

        logError: function(message) {
            this.console.error(message);
        }
    };
})();

しかし、この場合、init定義されていないエラーが発生します。

4

1 に答える 1