Обращение к приватной переменной из прототипной функции 
		
		
		
		Доброго времени суток! Подскажите, никак не могу найти решение касательно 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 многого ли стоит?  | 
	
		
 Цитата: 
	
 Цитата: 
	
 
var human = (function () {
    var prototype = {}
    prototype.getName
   
    +function(){
   var name;
    prototype.getName = function (str) {
        if (str) name = str
        return name
    }
 
    function constructor(data) {
        name
    }
   }()
    constructor.prototype = prototype
    return constructor
}())
 
var h1 = new human
h1.getName('Vasia')
var h2 = new human
h2.getName('Petia')
 | 
	
		
 Цитата: 
	
 Если бы всё было так просто, я бы не спрашивал, после выполнения этого кода, стало так: h1.getName() // Petia h2.getName() // Petia Мне нужно чтобы name был уникальным для каждого экземпляра.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 
var human = (function () {
    var prototype = {}
    prototype.getName
   
    +function(){
   var name;
    prototype.getName = function (str) {
        if (str) name = str
        return name
    }
 
    function constructor(data) {
        name
    }
   }()
    constructor.prototype = prototype
    return constructor
}())
 
var h1 = new human
h1.getName('Vasia')
var h2 = new human
h2.getName('Petia')
 | 
	
		
 Исправил вашь код: 
	
function log(a){document.body.innerHTML+=a+'<br>'}
//функция хуман это не конструктор, она возвращает конструктор которы надо потом инициализировать с помощью new
var human = (function () {
	var prototype = {}
	//prototype.getName
	var _data, _name;
	
	prototype.setName = function (str)
	{
		if (str) _name = str
	}
	prototype.getName = function () 
	{
		return _name
	}
	function constructor(data) {
		//this.name
                       _data=data
	}
	constructor.prototype = prototype
	return constructor
})
var Alfa = new (human())() //столько скобок нужно что бы new относилось к constructor а не к human, 
Alfa.setName('Vasia')
log('Alfa: '+ Alfa.getName() )
var Beta = new (human())()
Beta.setName('Petia')
Beta._name='Евгений Ваганыч'; //создаться публичное свойство _name но приватное _name не изменится
log('Beta: '+ Beta.getName() );
log('Alfa: '+ Alfa.getName() )
Раед, Вашь код не работает в IE9 и Опере (в других не тестил) опера ругается Uncaught exception: TypeError: 'h1.getName' is not a function И я не понимаю что за синтаксис такой +function  | 
	
		
 Цитата: 
	
 
var human = (function () {
    var prototype = {}
    prototype.getName
    
    +function(){
   var name;
    prototype.getName = function (str) {
        if (str) name = str
        return name
    }
  
    function constructor(data) {
        name
    }
   }()
    constructor.prototype = prototype
    return constructor
}())
  
var h1 = new (human())();
h1.getName('Vasia')
var h2 = new (human())();
h2.getName('Petia')
Цитата: 
	
  | 
	
		
 Просто назовите свойство  
	_name. Такое соглашение о именование свойств, которые не должны использоваться снаружи, давно устоялось,  известно и используется множеством js-программистов. | 
	
		
 Цитата: 
	
 Цитата: 
	
 Опера например ругается Цитата: 
	
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Ну городите замыкания, раз вас веселит соглашение об именовании свойств, которое, как UpperCamelCase для конструкторов и lowerCamelCase для всего остального, присутствует в guidеline\'ах к стилю JavaScript-кода. 
	 | 
| Часовой пояс GMT +3, время: 08:18. |