!(function() { var obj = {}, initVal = "Jim", foo = document.getElementById("foo"), change = document.getElementById("change"), input = document.getElementById("input"); foo.innerHTML = initVal; input.addEventListener("keyup", function() { obj.name = this.value; }); change.addEventListener("click", function(e) { obj.name = "Joe"; }); Object.defineProperty(obj, "name", { "get": function() { console.log("get name"); return initVal; }, "set": function(val) { console.log("set name to " + val); initVal = val; foo.innerHTML = initVal; } }); })();