Показать сообщение отдельно
  #1 (permalink)  
Старый 12.04.2012, 19:44
Аватар для unclechu
Интересующийся
Отправить личное сообщение для unclechu Посмотреть профиль Найти все сообщения от unclechu
 
Регистрация: 12.09.2011
Сообщений: 14

Обращение к приватной переменной из прототипной функции
Доброго времени суток! Подскажите, никак не могу найти решение касательно js. Давайте сразу к простому примеру:
var human = (function () {
	var prototype = {}
	prototype.getName

	prototype.getName = function (str) {
		if (str) this.name = str
		return this.name
	}

	function constructor(data) {
		this.name
	}
	constructor.prototype = prototype
	return constructor
}())

var h1 = new human
h1.getName('Vasia')
var h2 = new human
h2.getName('Petia')

Условие тут таково, что должны быть прототипные функции, которые будут обращаться в приватным переменным экземпляра конструктора.
В данном случае this.name — это публичное свойство, но что если я не хочу чтобы можно было напрямую менять name в духе:
var h1 = new human
h1.getName('Vasia')
h1.name = 'Petia'

Как мне это преградить? Иными словами: как работать с приватными переменными из функции в прототипе? Вроде как банальная потребность.
Единственное что пришло в голову: это хранить массив id экземпляров с объектами данных выше уровнем, чем конструктор, а в this.id хранить уже сам идентификатор конкретного экземпляра. Но, согласитесь, это маразм, да и к тому же поменять id многого ли стоит?
Ответить с цитированием