我不知道为什么当我浏览JS Mixin模式教程时,没有定义`Logger`

时间:2015-09-22 04:57:36

标签: javascript logging mixins

我正在尝试学习一些编程,我正在查看this教程,我在控制台ReferenceError: Logger is not defined --> }(Logger))中收到了此错误。我认为tut的代码和我的代码之间的主要区别在于教程使用了下划线的扩展,我想我会使用我在其他地方找到的扩展方法(函数)。

    function extend(destination, source){
        for(var k in source){
            if(source.hasOwnProperty(k)){
                destination[k] = source[k];
            }
        }
        return destination;
    }
    (function () {
        var Logger = {
            log: function (message) {
                if (window.console && typeof console.log === "function") {
                    console.log(message);
                }
            }
        };

        return Logger;
    }());

    (function ( Logger) {
        var MyObject = function () {
            this.doSomething = function () {
                this.log("My Object is doing something!");
            };
        };

        // This copies the members of the `Logger` object onto the prototype of `MyObject`
        extend(MyObject.prototype, Logger);

        return MyObject;
    }(Logger))

    var obj = new MyObject();
    obj.doSomething();

也许问题是我不知道如何使用自调用匿名函数。

2 个答案:

答案 0 :(得分:0)

因为您没有存储烹饪Logger对象的匿名函数返回的结果。

var Logger = (function () {
    var Logger = {
        log: function (message) {
            if (window.console && typeof console.log === "function") {
                console.log(message);
            }
        }
    };

    return Logger;
}());

现在,您可以使用Logger

答案 1 :(得分:0)

Logger未定义,因为您在第一个自调用函数中将其作为局部变量。要使其可用,您应该这样做:

var Logger = (function () {
        var Logger = {
            log: function (message) {
                if (window.console && typeof console.log === "function") {
                    console.log(message);
                }
            }
        };

        return Logger;
    }());

但是MyObject存在同样的问题,所以你必须这样做

var MyObject = ( function() { .... } (Logger) )