<!DOCTYPE html>
<html>
<head>
<title>CS 86 example SimpleButton3</title>
<!-- Like SimpleButton2.html, but now more object-like, using class syntax -->
<script>
/*
* ECMAScript class syntax - looks more like a traditional class definition
*/
class Main { //*6 Initialization
constructor () { //*6
new MyButton ("Push me"); //*6
new RedButton ("Push me also"); //*6
}
}
/*
* MyButton will *have* a captive HTML button, not *be* a button
*/
class MyButton { //*1 Use Javascript object and class syntax
constructor (label) { //*1
// Instantiate our captive button and keep a pointer to it in ivar
this.button = document.createElement("input"); //*2 HAVE, not BE, a button
this.button.setAttribute ("type", "button"); //*2
this.button.setAttribute ("value", label); //*2
buttonarea.appendChild (this.button); //*2
this.button.addEventListener ("click", this.mycallback); //*3 Callback as a method
}
// NB "this" in mycallback will actually be the HTML element!
mycallback () { //*3
statusmsg.textContent = "Button labeled '" + this.value + "' was pushed "; //*3
}
}
/*
* To show inheritance syntax
*/
class RedButton extends MyButton { //*4 Use Javascript inheritance
constructor (label) { //*4
super (label); //*4
this.button.style.color = "red"; //*5 Override inherited
}
mycallback () { //*5
statusmsg.textContent = "RedButton labeled '" + this.value + "' was pushed "; //*5
}
}
window.onload = function () { //*6
new Main () //*6
}
</script>
</head>
<body>
<div id="buttonarea">
</div>
<p><b>Status:</b> <span id="statusmsg">(Nothing pushed)</span></p>
</body>
</html>