29.03.2013, 00:04
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
А че из ифрейма достать другой конструктор не вариант?
(function () {
var iFrame = document.createElement("iframe"), iFrameDoc;
document.body.appendChild(iFrame);
iFrameDoc = iFrame.contentDocument || iFrame.contentWindow.document;
iFrameDoc.open();
iFrameDoc.write('<script>window.Array = Array</scr' + 'ipt>');
iFrameDoc.close();
window.$Array = (iFrame.contentWindow || iFrameDoc.defaultView).Array;
}());
$Array.prototype.test = function () {};
var array = [], $array = new $Array();
alert([
"test" in array,
"test" in $array,
Array.isArray ? Array.isArray($array) : "",
Object.prototype.toString.call($array),
new $Array(1, 2, 3).concat(4)
]);
Последний раз редактировалось Octane, 29.03.2013 в 00:10.
|
|
29.03.2013, 00:13
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от nerv_
|
не понял, что ты имеешь ввиду
|
Например в fancybox увидел проверку if ($.type($el) == 'object') { .. }
Но для zepto type = 'array'. Проверка не проходит. И это кривизна zepto.
Сообщение от nerv_
|
зачем?
|
Там же увидел if ($el instanceof $) { ... }
Опять же, для zepto это не сработает.
|
|
29.03.2013, 00:41
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
Сообщение от rgl
|
Aetae,
Только функция должна быть чуть посложнее - нужно отсекать дробные числа, слишком большие числа, и много чего еще:
|
Ну я и не претендовал на окончательность - просто пример.)
Кстати по поводу больших чисел - просто наш псеводомассив круче нативного. ))
Сообщение от Octane
|
А че из ифрейма достать другой конструктор не вариант?
|
Ну да, забыли об энтом варианте. Но тут свои подводные камни, ибо энтот $array уже не instance от Array. Да и грязно это, юзать стоит только если задача стоит "добиться N любой ценой".)
__________________
29375, 35
Последний раз редактировалось Aetae, 29.03.2013 в 00:43.
|
|
29.03.2013, 01:27
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от danik.js
|
Там же увидел if ($el instanceof $) { ... }
Опять же, для zepto это не сработает
|
в зепто для этого есть специальный метод
$.zepto.isZ( some );
Сообщение от danik.js
|
Например в fancybox увидел проверку if ($.type($el) == 'object') { .. }
Но для zepto type = 'array'. Проверка не проходит.
|
ради интереса проверил
var x = $( 'div' );
alert( $.type( x ) == 'array' ); // true
alert( $.type( x ) === 'array' ); // и так тоже true
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
29.03.2013, 10:01
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Octane, блин, круто! Это действительно делает то, что мне нужно. Но это конечно очень грязный хак. Я не уверен что его можно использовать.
А есть еще подобные вариации для получения другого Array ?
Сообщение от Aetae
|
$array уже не instance от Array
|
Так это понятно. Это и отражает суть задачи - прототипы должны быть разными. Следовательно мы не будем иметь instance от Array.
Сообщение от nerv_
|
в зепто для этого есть специальный метод
|
Я вкурсе. Но jquery-плагинам это неизвестно )
Сообщение от nerv_
|
alert( $.type( x ) == 'array' ); // true
|
Я о чем и говорю. Коллекция zepto - массив. Коллекция jquery - объект.
В плагинах бывает проверка через $.type и поведение jquery и zepto тут будет разным.
|
|
29.03.2013, 12:42
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
могу повторить свою точку зрения: если ты хочешь подключать жуквери плагины к зепто, то вряд ли обойдешься вышеперечисленным. Все равно придется лезть в код.
Сообщение от danik.js
|
Я вкурсе. Но jquery-плагинам это неизвестно )
|
не проще поиск и замена по регулярному выражению внутри плагина, чем вся эта акробатика?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
29.03.2013, 13:09
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
danik.js,
это еще чо , мы тогда пытались функции с другим прототипом получать вот это было весело)
|
|
29.03.2013, 13:49
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от nerv_
|
не проще поиск и замена по регулярному выражению внутри плагина, чем вся эта акробатика?
|
Правки плагинов - это ведь и есть акробатика. Не проще ли раз и навсегда устранить различия между jquery и zepto ? Нет ведь принципиальных проблем сделать это.
|
|
29.03.2013, 14:17
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от danik.js
|
Не проще ли раз и навсегда устранить различия между jquery и zepto ?
|
проще использовать жуквери. Или жуквери 2.0 А если устранить различия (полностью, как ты хочешь), то вместо зепто мы получим жуквери.
Могу еще пример привести: когда пытался подключить жуквери плагин к зепто, оказалось, что в зепто нет метода pushStack.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
29.03.2013, 15:48
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от nerv_
|
А если устранить различия (полностью, как ты хочешь)
|
Пффф. Почему полностью?
Дописать $.prototype = перед $.fn - это всего 12 символов
Ну с коллекциями будет чуть сложнее, но правок будет не так уж и много. На уровне ядра больше ничего править то и не нужно (наверное). С чего ты взял что после этих правок zepto станет jquery?
Это не кучи говна ради совместимости с IE6, не миллионы оберток, исправляющие недочеты быдлокодеров, css-анимация никуда не денется. Selector engine не добавится.
В общем я знаю две вещи:
1) нужно по возможности использовать Zepto. Ибо работает быстрее, грузится быстрее, и не содержит тонны мертвого кода. А ишак( IE8- ) пускай хавает jQuery.
2) при желании можно писать плагины, совместимые как с jQuery, так и с Zepto. И это не так уж и сложно.
|
|
|
|