Показать сообщение отдельно
  #11 (permalink)  
Старый 12.04.2012, 23:44
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Кроме огорода замыканий не вижу вариантов. Можно, например, создавать в конструкторе одноимённое прототипному свойство, которое будет вызывать функцию с тем же именем. из прототипа, передавая ей приватную переменную. Саму процедуру обёртывания и замыкания можно тоже в прототип переместить. Так в конструкторе повторы будут, конечно, но меньше, чем если просто там размещать все функции. Получается как-то так:
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)
	},
	getName: function(name) {
		return name[0];
	},
	constructor: Human
}
 
h1 = new Human("Василий Иванович");
h2 = new Human("Иван Васильевич");

alert(h1.getName())
alert(h2.getName())
. Как-то костыльно, nein? Вариант с соглашением проще. и лучше, на мой взгляд.

Последний раз редактировалось GuardCat, 12.04.2012 в 23:47.
Ответить с цитированием