Показать сообщение отдельно
  #14 (permalink)  
Старый 13.04.2012, 01:23
Интересующийся
Отправить личное сообщение для Mixxx Посмотреть профиль Найти все сообщения от Mixxx
 
Регистрация: 11.04.2012
Сообщений: 20

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__))

Последний раз редактировалось Mixxx, 13.04.2012 в 01:55.
Ответить с цитированием