我无法弄清楚为什么我的消息变量在下面的代码中的displayMessage函数中未定义。我一直收到消息未定义的错误。 " Cannot read property 'push' of undefined
"
function messageService( ) {
var messages = {};
var service = {
messages: messages,
displayMessage: displayMessage
};
return service;
function displayMessage (message, messageType) {
messages[messageType].push(message);
}
}
我正在尝试使用John Papa的方法来布置与返回服务分开的变量和函数,但我无法弄清楚如何使消息可用于内部函数。
我也试过这个:
function messageService( ) {
/*jshint validthis: true */
var self = this;
self.messages = {};
var service = {
messages: self.messages,
displayMessage: displayMessage
};
return service;
function displayMessage (message, messageType) {
self.messages[messageType].push(message);
}
}
非常感谢任何帮助!
答案 0 :(得分:2)
(
未在任何地方定义。所以它没有定义。
messages[messageType]
初始化为空对象,没有任何字段。所以messages
确实是未定义的。
要定义它,并且能够在其上调用push(),您需要像
这样的行messages[messageType]
将messages[messageType] = [];
初始化为新的空数组。
答案 1 :(得分:1)
您需要使用包含空数组的属性定义messages对象,并且可以推送值:
function messageService( ) {
var service = {
messages: {
debug: [],
info: [],
warning: [],
error: []
},
displayMessage: displayMessage
};
return service;
function displayMessage (message, messageType) {
service.messages[messageType].push(message);
}
}
注意:用您的消息替换消息类型