Ваш IIFE ничего не возвращает, поэтому DomLoad
равно undefined
.Также changeData
является локальной переменной внутри IIFE, к ней нельзя получить доступ из встроенного обработчика событий.Вы должны сделать либо
const changedata = (function(){
function ChangeData() {
this.active = 'blue-color';
}
ChangeData.prototype.change = function(imagename, idname, colorname) {
document.getElementById(this.active).classList.remove("active");
this.active = idname;
document.getElementById(this.active).className += " active";
document.getElementById("text").innerHTML = colorname;
document.getElementById("carimage").src='assets/'+imagename+'.jpg';
};
return new ChangeData();
});
<div class="color-circle" id="grey-color" onclick="changedata.change('grey','grey-color', 'Grey')"></div>
или
function DomLoad(){
function ChangeData() {
this.active = 'blue-color';
}
ChangeData.prototype.change = function(imagename, idname, colorname) {
document.getElementById(this.active).classList.remove("active");
this.active = idname;
document.getElementById(this.active).className += " active";
document.getElementById("text").innerHTML = colorname;
document.getElementById("carimage").src='assets/'+imagename+'.jpg';
};
const changedata = new ChangeData();
document.getElementById("grey-color").addEventListener("click", function(event) {
changedata.change('grey','grey-color', 'Grey');
});
}
document.addEventListener("DOMContentLoaded", DomLoad);
<div class="color-circle" id="grey-color"></div>