Цитата:
Приведи пример где что-то работает адово и неправильно? А то я что-то вообще не понимаю о чем ты? Может тебе прсто стоит почитать учебник для начинающий если тебе что-то кажется трудным? Или спецификацию. А лучше напиши мне я тебе на вопросы отвечу и побьясню что как работает чтобы не казалось адовым. я же помочь хочу. Если ты не пришлешь пример с кодом где у тебя возникают проблемы и адовый дискомфорт, то будем считать что это просто твоя нубоватость его вызывает). И тебе просто нужно подучиться. И набраться опыта. ![]() |
Mахmaxmaximus, твой съезд на личности не добавляет авторитета твоим сообщениям.
Попробую пояснить в последний раз - я понимаю как и что работает, безо всяких объяснений. Меня не до конца нравится как именно это работает. |
Цитата:
Они могут быть связанными с твоим незнанием с нубоватостью! Либо с языком. Вот я и просил пример кода чтобы обьяснить что да как. Просто у меня адовости же нет, я бы и хотел чтобы у тебя её не было. |
Проблемы есть у всех, но мы здесь обсуждаем не их, а typeof.
"Адовость" в том, что чтобы написать простую функцию требуется множество выкрутасов с последующей отладкой во всех браузерах. Попробую ещё раз описать её. Нужно проитерировать произвольное входное значение. Для этого нужно соотнести её с одним из трёх семантически различных типов: 1. грубо говоря "словарь": то что итерировать нужно через for..in. 2. список (Array, arguments, HTMLCollection ...), перебираемый последовательным доступом. 3. скаляр, сюда же нужно отнести function, DOMElement, TextNode и другие подобные структуры. хотя они и являются объектами, но работать нужно с их значением, а не набором привязанных свойств. вот если приведёшь реализацию функции, в которой это всё будет сделано просто, элегантно и органично с языком, то я заберу все свои слова назад. |
function each(collection, callback, scope) { var key; for (key in collection) { if (collection.hasOwnProperty(key) { callback.call(scope, collection[key], key, collection); } } } Кроссбраузерность 100%. Я потратил на написание меньше минуты. |
Первое же на вскидку, что могу сказать:
1. Chrome, Opera и Safari в HTMLCollection переберут и свойство length 2. В IE7 у HTMLCollection вообще нет метода hasOwnProperty() - вылетит с ошибкой. 3. 3-й пункт моего примера не обрабатывается. 4. Любое добавленное к массиву или коллекции свойство попадёт в перебор. Пример - перебор jQuery-объекта. |
function each(collection, callback, scope) { var key; for (key in collection) if (collection.hasOwnProperty(key) { callback.call(scope, collection[key], key, collection); } } обманываете это как то связано с javascript? Пример - перебор jQuery-объекта. так ты это и хотел, а если нет, то отвечу так: есть универсальный итератор, я его выше показал, если нужен персональный итератор для определенного класса сущностей то сделай его. |
Добавлять свойства к уже определенным ранее объектам это признак дурного тона, а если Вам было необходимо расширить функционал уже нативных коллекций, тогда следовало бы создать наследника и использовать его в своих нуждах. В таком случае пользовательские свойства не попадают под итерацию.
|
Цитата:
var arr = [1,2,3]; arr.foo = 'bar'; for( var prop in arr ) { arr.hasOwnProperty( prop ) && console.log( prop, arr[prop] ) ; } Для перебора нужно использовать, то что для это предназначено. |
Цитата:
for (var i = 0; i < arr.length; i++), можно ведь написать так? |
Часовой пояс GMT +3, время: 12:22. |