function MyClassList(classes, dom){
[].push.apply(this, classes)
Object.defineProperty(this, "__value__", {
enumerable: false,
set: function(val){
dom.className = val;
}
})
}
MyClassList.prototype = {
addClass: function addClass(cls){
if(!this.contains(cls)){
[].push.call(this, cls)
}
this.__value__ = [].join.call(this, " ")
},
removeClass: function removeClass(cls){
if(this.contains(cls)){
for(var i=0;i<this.length;i++){
if(this[i] === cls){
[].splice.call(this, i, 1)
return cls;
}
}
this.__value__ = [].join.call(this, " ")
}
},
toggleClass: function toggleClass(cls){
this.contains(cls) ? this.removeClass(cls) : this.addClass(cls);
this.__value__ = [].join.call(this, " ")
},
contains: function contains(cls){
return [].includes.call(this, cls)
}
}
Object.defineProperty(HTMLElement.prototype, "myClassList", {
get: function(){
if(!this.__classList__){
this.__classList__ = new MyClassList(this.className.split(/\s+/),this)
}
return this.__classList__;
}
});
div id="myDiv" class="a b c"></div>
myDiv.myClassList.addClass("d")
myDiv.myClassList.removeClass("b")
myDiv.myClassList.toggleClass("E")