22.02.2012, 23:47
|
Профессор
|
|
Регистрация: 22.02.2012
Сообщений: 163
|
|
Сообщение от vasa_c
|
И задача эта не такая простая как с первого взгляда кажется.
|
Я читая то сообщение ответил что прошу пример. Разве не понятно что повтор того сообщения новой информации мне не принесет? Я ЧИТАЯ то твое сообщение попросил привести примеры.
Приведи пример где что-то работает адово и неправильно? А то я что-то вообще не понимаю о чем ты? Может тебе прсто стоит почитать учебник для начинающий если тебе что-то кажется трудным? Или спецификацию. А лучше напиши мне я тебе на вопросы отвечу и побьясню что как работает чтобы не казалось адовым. я же помочь хочу. Если ты не пришлешь пример с кодом где у тебя возникают проблемы и адовый дискомфорт, то будем считать что это просто твоя нубоватость его вызывает).
И тебе просто нужно подучиться. И набраться опыта.
Последний раз редактировалось Mахmaxmaximus, 23.02.2012 в 00:45.
|
|
23.02.2012, 12:24
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
Mахmaxmaximus, твой съезд на личности не добавляет авторитета твоим сообщениям.
Попробую пояснить в последний раз - я понимаю как и что работает, безо всяких объяснений. Меня не до конца нравится как именно это работает.
|
|
23.02.2012, 14:39
|
Профессор
|
|
Регистрация: 22.02.2012
Сообщений: 163
|
|
Сообщение от vasa_c
|
Попробую пояснить в последний раз - я понимаю как и что работает, безо всяких объяснений. Меня не до конца нравится как именно это работает.
|
как тут безличности если ты - личность, и у тебя проблемы.
Они могут быть связанными с твоим незнанием с нубоватостью!
Либо с языком.
Вот я и просил пример кода чтобы обьяснить что да как.
Просто у меня адовости же нет, я бы и хотел чтобы у тебя её не было.
|
|
23.02.2012, 14:53
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
Проблемы есть у всех, но мы здесь обсуждаем не их, а typeof.
"Адовость" в том, что чтобы написать простую функцию требуется множество выкрутасов с последующей отладкой во всех браузерах.
Попробую ещё раз описать её.
Нужно проитерировать произвольное входное значение.
Для этого нужно соотнести её с одним из трёх семантически различных типов:
1. грубо говоря "словарь": то что итерировать нужно через for..in.
2. список (Array, arguments, HTMLCollection ...), перебираемый последовательным доступом.
3. скаляр, сюда же нужно отнести function, DOMElement, TextNode и другие подобные структуры.
хотя они и являются объектами, но работать нужно с их значением, а не набором привязанных свойств.
вот если приведёшь реализацию функции, в которой это всё будет сделано просто, элегантно и органично с языком, то я заберу все свои слова назад.
|
|
23.02.2012, 15:48
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
function each(collection, callback, scope) {
var key;
for (key in collection) {
if (collection.hasOwnProperty(key) {
callback.call(scope, collection[key], key, collection);
}
}
}
Кроссбраузерность 100%. Я потратил на написание меньше минуты.
|
|
23.02.2012, 16:58
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
Первое же на вскидку, что могу сказать:
1. Chrome, Opera и Safari в HTMLCollection переберут и свойство length
2. В IE7 у HTMLCollection вообще нет метода hasOwnProperty() - вылетит с ошибкой.
3. 3-й пункт моего примера не обрабатывается.
4. Любое добавленное к массиву или коллекции свойство попадёт в перебор.
Пример - перебор jQuery-объекта.
|
|
23.02.2012, 17:35
|
Профессор
|
|
Регистрация: 22.02.2012
Сообщений: 163
|
|
function each(collection, callback, scope) {
var key;
for (key in collection) if (collection.hasOwnProperty(key) {
callback.call(scope, collection[key], key, collection);
}
}
1. Chrome, Opera и Safari в HTMLCollection переберут и свойство length
обманываете
2. В IE7 у HTMLCollection вообще нет метода hasOwnProperty() - вылетит с ошибкой.
это как то связано с javascript?
4. Любое добавленное к массиву или коллекции свойство попадёт в перебор.
Пример - перебор jQuery-объекта.
так ты это и хотел, а если нет, то отвечу так:
есть универсальный итератор, я его выше показал, если нужен персональный итератор для определенного класса сущностей то сделай его.
Последний раз редактировалось Mахmaxmaximus, 23.02.2012 в 17:37.
|
|
23.02.2012, 17:42
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
Добавлять свойства к уже определенным ранее объектам это признак дурного тона, а если Вам было необходимо расширить функционал уже нативных коллекций, тогда следовало бы создать наследника и использовать его в своих нуждах. В таком случае пользовательские свойства не попадают под итерацию.
Последний раз редактировалось DreamTheater, 23.02.2012 в 17:46.
|
|
23.02.2012, 17:45
|
Профессор
|
|
Регистрация: 01.02.2010
Сообщений: 364
|
|
Сообщение от Mахmaxmaximus
|
4. Любое добавленное к массиву или коллекции свойство попадёт в перебор.
Пример - перебор jQuery-объекта.
так ты это и хотел
|
Вот пример о чем вообще идет речь.
var arr = [1,2,3];
arr.foo = 'bar';
for( var prop in arr ) {
arr.hasOwnProperty( prop ) && console.log( prop, arr[prop] ) ;
}
Для перебора нужно использовать, то что для это предназначено.
|
|
23.02.2012, 17:49
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
Сообщение от nikita.mmf
|
Вот пример о чем вообще идет речь.
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++)
, можно ведь написать так?
|
|
|
|