Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Унаследовать Array (https://javascript.ru/forum/misc/25136-unasledovat-array.html)

inst 26.01.2012 19:04

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153107)
Собираешься ли ты менять фильтры на ходу несколько раз, собираешься ли ты менять фильтры у отдельных листов? есть ли фильтры по умолчанию?

_
вот если бы мне нужен был массив который бы принимал только числа, я бы сделал не так тупо как ты я бы сделал так:

Я собираюсь сделать этот List частью API, а от него унаследовать несколько других объектов, которые по сути нужны просто для отслеживания изменений. Менять фильтры не буду, просто определю нужные в прототипах унаследованных объектов. По умолчанию ничего не надо, вроде бы.

А как?

Livaanderiamarum 26.01.2012 19:12

(function(name) {
	var prototype = {}
	prototype.__proto__ = Array.prototype;
	with (prototype) {
		// ниже перекрываешь методы добавляешь фильтры и.т.п.












        // раз перекрыли -------------------------------------------------------
		push = function(arg) {
			if(typeof agr == 'string'){
				//эта строчка использует метод массива
				Array.prototype.push.apply(this, arguments)
			}
		};








        // два перекрыли -------------------------------------------------------
		blablabla = function(arg) {
		    alert(arg)
		};














	
	}
	window[name] = function() {
		var list = []
		list.__proto__ = prototype
		return list
	}
})('List')



новые листы создаются без new чтобы удобнее было, просто
var list = List()

inst 26.01.2012 19:33

В общем, суть та же, только для более узкого круга задач :)

Я разобрался, ошибка была в том, что я в proxyFn вместо
result = Array.prototype[fn].apply(obj, args);
вызывал метод не из прототипа.

Спасибо за помощь :)

Livaanderiamarum 26.01.2012 19:54

Цитата:

Сообщение от inst
Спасибо за помощь

Не вопрос бро))

poorking 26.01.2012 20:15

inst,
Обратите внимание на splice, я не помню как именно, но метод работал не корректно, а может и не только он, то ли элементы не удалялись, то ли индексы не менялись, тоже как-то давно очень захотелось подобную штуку сделать, потом понял ,что затея вобщем-то, просто ради затеи...

DreamTheater 26.01.2012 20:47

function List() {
    alert('Hello, I am List constructor!');
};

List.prototype = Object.create(Array.prototype, {
    move: {
        value: function () {
             alert('I am custom method "move"!');
        }
    }
});

new List().move();

Gozar 26.01.2012 21:46

>= IE9 и Опера 11.60, но если для себя то уже можно ж;)


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