Проблема в том, что есть только одна функция Device.prototype.saveLocation
. Каждый раз, когда вы создаете новое устройство, вы перезаписываете эту функцию самой последней, которая имеет последнее значение self
.
Функции прототипа не должны создаваться в конструкторе, они должны быть определены только один раз. Ему не нужно использовать self
, потому что он получает объект, который вызывается как this
.
Вам нужно использовать self
только в функциях обратного вызова, определенных в конструкторе, а не в методах объекта или прототипа.
Так и должно быть.
function Device(socket) {
this.imei = false;
this.status = false; //maintaining the logged in status
let self = this; //saving this variable
this.on('data', function() { //Event on the device object
//I want to access self.imei
});
}
Device.prototype.saveLocation = function(parts) {
//Here the value of self changes to the value of self of the recent object created
console.log("In save location : IMEI " + this.imei);
};
Вы также можете определить функцию обратного вызова, используя функцию стрелки, тогда она наследует this
от того места, где она была определена.
function Device(socket) {
this.imei = false;
this.status = false; //maintaining the logged in status
let self = this; //saving this variable
this.on('data', () => { //Event on the device object
//You can access this.imei here
});
}
Device.prototype.saveLocation = function(parts) {
//Here the value of self changes to the value of self of the recent object created
console.log("In save location : IMEI " + this.imei);
};