Если вы не нацелены на пользователей Internet Explorer, попробуйте использовать геттеры и сеттеры.
var x = 5;
function myObj()
{
this.master = 17;
this.getSlave1 = function() {return this.master + x;},
this.getSlave2 = function() {return (this.master / 2.2) + 1;},
this.getSlave3 = function() {return Math.floor(this.getSlave2());}
}
myObj.prototype = {
get slave1() {
return this.getSlave1();
},
get slave2() {
return this.getSlave2();
},
get slave3() {
return this.getSlave3();
}
};
В действии:
window.onload = function()
{
o = new myObj();
document.write("Master: "+o.master+"</br>");
document.write("Slave 1: "+o.slave1+"</br>");
document.write("Slave 2: "+o.slave2+"</br>");
document.write("Slave 3: "+o.slave3+"</br></br>");
o.master = 42;
document.write("Master: "+o.master+"</br>");
document.write("Slave 1: "+o.slave1+"</br>");
document.write("Slave 2: "+o.slave2+"</br>");
document.write("Slave 3: "+o.slave3+"</br>");
}
производит вывод:
Master: 17
Slave 1: 22
Slave 2: 8.727272727272727
Slave 3: 8
Master: 42
Slave 1: 47
Slave 2: 20.09090909090909
Slave 3: 20
Этот код никогда не будет работать в любой версии Internet Explorer, в прошлом, настоящем или будущем.Однако к ведомым значениям все еще можно получить доступ с помощью функций getSlaveX()
.