我正在尝试学习一些编程,我正在查看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();
也许问题是我不知道如何使用自调用匿名函数。
答案 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) )