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

Сообщение от Mixxx Посмотреть сообщение
Исправил вашь код:
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
Это конечно решение, но я так понимаю смысл использование прототипов теряется? Потому как: Alfa.__proto__ !== Beta.__proto__ Ну то-бишь не реюзится отсылка к прототипу уже, а попросту новые прототипы?

В таком случае решение с символом «_» — лучший вариант, когда нужны тру-прототипы.

Последний раз редактировалось unclechu, 13.04.2012 в 00:44.
Ответить с цитированием