GuardCat,
Посмотрел вашь код
понял что вы предлагаете запоминать name в массиве который
зависнет как параметр анонимной функции внутри нового метода getName который переопределит makeWrap. Надо сказать это весьма и весьма хиро%опо
setName можно реализовать также как в конструкторе:
...
setName: function(newName)
{
this.makeWrap('getName',[newName])
},
...
Но ведь это ужасно
получается прямого доступа к полю нейм нету даже внутри методов объекта.
Во что у меня получилось из вашего кода (массивы убрал так как тут они не нужны):
function log(a){alert(a)}
function Human(name)
{
this.makeWrap("getName", name);
}
Human.prototype =
{
makeWrap: function (propertyName, args)
{
this[propertyName] =
(
function(args)
{
return function()
{
return Human.prototype[propertyName](args);
}
}
)(args)
},
setName: function(newName)
{
this.makeWrap('getName',newName)
},
getName: function(name)
{
return name;
},
setLastName: function(LName)
{
this.makeWrap('getLastName',LName)
},
getLastName: function(LName)
{
return LName
},
getFullName: function()
{
return this.getName()+' '+this.getLastName();
}
// ,constructor: Human
}
h1 = new Human("Владимир");
h2 = new Human("Дмитрий");
h1.setLastName('Путин');
log(h1.getFullName())
h2.setLastName('Медведев');
log(h2.getFullName())
h2.setName('Александр')
log(h2.getFullName())
log('Протипы равны? '+(h1.__proto__ === h2.__proto__))