Сообщение от rexton
|
Собственно вопрос в том, что при первом вызове из "*2" в отладчике показывает что у переменной b в прототипе нет метода setSelectсallback.
|
Это все потому, что вы прототип функции изменяете при её вызове.
JavaScript - интерпретируемый ЯП.
Сообщение от rexton
|
но когда я пытаюсь использовать значение переменной изнутри функции оно всегда равно 1
|
Вы, скорее всего, проводите манипуляции над свойством до того, как его значение будет перезаписано. Без упоминаемого кода сложно сказать, что не так.
Попробуйте так:
function someClass() {
this.selectCallback = 1;
if (!this.gFileList && window.gCurentPath) {
this.__loadFileList(gCurentPath);
}
};
someClass.prototype.gFileList = null;
someClass.prototype.__loadFileList = function (directoryPath) {
if (!directoryPath) {
return Promise.reject();
}
return getFilesAndFoldersList(directoryPath).then(res => {
this.gFileList = res;
});
};
someClass.prototype.setSelectCallback = function (value) {
this.selectCallback = value;
};
window.addEventListener('load', function () {
var someClassInstance = new someClass();
someClassInstance.setSelectCallback(function (a) {
// do something
let c = a;
});
});
P.S. от прямого изменения прототипа можно избавиться с помощью синтаксического сахара добавленного в ES6, т.е. объявить класс с помощью ключ. слова «class».