これは愚かな質問かもしれませんが、私はjavascriptを初めて使うので、作成されたオブジェクトで別の関数を呼び出した後にJavascriptで作成されたオブジェクトのプロパティ値が定義されていません
私が作成した以下のnotificationSocketEventHandler
オブジェクトいます
const notificationSocketEventHandler = Object.create(socketHandlerProto, {
validators: {
created: [],
destroyed: [],
loadedFromSocket: [],
updated: [],
addedto: {
relation: []
},
removedfrom: {
}
},
created: function (data) {
if (this.validateProfileData(data, validators.created)) {} else {}
},
destroyed: function (data) {},
updated: function (data) {},
loadedFromSocket: function (data) {
console.log('Loaded from socket')
console.log(data)
}
})
このイベントハンドラはそうソケット からの通知をリッスンするために使用されており、イベントのプロトタイプがあるこの
$.globals.socket.on('notifications',notificationSocketEventHandler);
のように設定されていますそのように定義される:
$.globals.socket = {
events: {},
on: function (attr, func) {
if (!attr) return false
this.events[attr] = this.events[attr] || [];
this.events[attr].push(func)
return true
},
remove(attr, func) {
if (!events[attr]) return false
this.events[attr].forEach(function (f, indx) {
if (f === func) {
events[attr].slice(indx, 1)
}
})
},
trigger: function (attr, thisArg, paramArgs) {
if (Array.isArray(attr) && attr.length) {
var obj = this.events[attr[0]]
for (var i = 1; i < attr.length; i++) {
if (!obj) return
obj = obj[attr[i]]
}
if (typeof obj == 'function') obj.apply(thisArg, paramArgs)
if (Array.isArray(obj)) {
obj.forEach(function (c) {
if (typeof c == 'function') c.apply(thisArg, paramArgs)
})
}
return
}
if(this.events[attr]){
console.log(this.events[attr])
this.events[attr].forEach(function (f) {
if (typeof f === 'function')
f.apply(thisArg, paramArgs)
})
}
}
}
問題は、notificationSocketEventHandler
オブジェクトが$.globals.socket.on
関数に渡され、最終的にイベントオブジェクトにプッシュされた後、created
,destroyed
、loadedFromSocket
などのプロパティが$.globals.socket.on
関数に渡される前に関数として定義されていることですイベントオブジェクト内で一度 `undefined 'になると、なぜですか?