Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструктор для компонента (https://javascript.ru/forum/misc/37056-konstruktor-dlya-komponenta.html)

zebra 09.04.2013 01:21

Menu.prototype = document.createElement('div'); - что именно здесь наследуется вы понимаете?
function M() {
   this.el = document.createElement('div');
   return this.getEl();
}
M.prototype.getEl = function() {
 return this.el;
};

megaupload 09.04.2013 01:28

он не отличает копирование от делегирования.

Aetae 09.04.2013 01:38

Ну фабричную функцию можно использовать и как конструктор, хотя смысла в этом особого и нет.) Можно даже навешать на элемент дополнительные свойства, но... см. выше.)

function Menu(options){
	function liToString(){
		return this.innerText || this.textContent;
	}

	var	d = document, 
		_ul = document.createElement('ul'),
		_items = options.items || [],
		_itemsCount = options.itemsCount || _items.length;
		
	;
	for(var i = 0; i<_itemsCount; i++){
		_ul[i] = _ul.appendChild(d.createElement('li'));
		_ul[i].appendChild(d.createTextNode(_items[i] || 'default'));
		_ul[i].toString = liToString;
	}
	_ul.length = _itemsCount;
    return _ul
};

var menu = new Menu({ //new тут никакой роли не играет =\
	items : ['1','два',3],
	itemsCount : 10
})

document.body.appendChild(menu)
alert([
	menu,
	menu[1],
	menu.length
].join('\n'))


P.S. С новомодным Proxy кстати можно такое творить... будет через годик другой.

danik.js 09.04.2013 06:29

Цитата:

Сообщение от Aetae
С новомодным Proxy кстати можно такое творить...

Например?


Часовой пояс GMT +3, время: 22:58.