我不确定为什么在浏览 JS Mixin 模式教程时未定义 `Logger`
I'm not sure why `Logger` is not defined when I'm going over a JS Mixin pattern tutorial
我正在尝试学习一些编程,我正在阅读 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();
可能问题是我不知道如何使用自调用匿名函数。
因为您没有存储由烹饪 Logger
对象的匿名函数返回的结果。
var Logger = (function () {
var Logger = {
log: function (message) {
if (window.console && typeof console.log === "function") {
console.log(message);
}
}
};
return Logger;
}());
现在,您可以使用 Logger
。
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) )
我正在尝试学习一些编程,我正在阅读 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();
可能问题是我不知道如何使用自调用匿名函数。
因为您没有存储由烹饪 Logger
对象的匿名函数返回的结果。
var Logger = (function () {
var Logger = {
log: function (message) {
if (window.console && typeof console.log === "function") {
console.log(message);
}
}
};
return Logger;
}());
现在,您可以使用 Logger
。
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) )