Es posible implementar getters / setters dinámicos en JavaScript?

Soy consciente de cómo crear captadores y establecedores para propiedades cuyos nombres ya se conocen, haciendo algo como esto:

// A trivial example:
function MyObject(val){
    this.count = 0;
    this.value = val;
}
MyObject.prototype = {
    get value(){
        return this.count < 2 ? "Go away" : this._value;
    },
    set value(val){
        this._value = val + (++this.count);
    }
};
var a = new MyObject('foo');

alert(a.value); // --> "Go away"
a.value = 'bar';
alert(a.value); // --> "bar2"

Ahora, mi pregunta es, ¿es posible definir una especie de captadores y establecedores generales como estos? Es decir, crear captadores y establecedores para cualquier nombre de propiedad que no es Ya definido

El concepto es posible en PHP usando__get() y__set() métodos mágicos (verla documentación PHP para obtener información sobre estos), así que realmente pregunto si hay un equivalente de JavaScript para estos.

o hace falta decir que, idealmente, me gustaría una solución que sea compatible con todos los navegadores.

Respuestas a la pregunta(4)

Su respuesta a la pregunta