08.02.2010, 15:05
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от tenshi
|
я бы его просто не использовал х)
|
Это умное решение. когда встал вопрос какая из ФВ лучшая, то прототайп у меня улетел сразу как я в него глянул.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
08.02.2010, 16:36
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
а кто прилетел вместо него?
__________________
.ня
|
|
08.02.2010, 21:10
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от tenshi
|
а кто прилетел вместо него?
|
jQ. Еще посматриваю на mootools.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
08.02.2010, 23:23
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
хрен редьки не слаще..
__________________
.ня
|
|
08.02.2010, 23:41
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
tenshi,
может попробуешь довести свой скрипт под осла?
у меня не выходит:
1)на root onpropertychange не срабатывает. зато срабатывает на document-е
2)даже если он срабатывает, то оба срабатывания происходят после вывода alert([ inverse( 0 ), inverse( 1 ) ])
то есть я не знаю, как получить res в такой ситуации
|
|
08.02.2010, 23:50
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
у меня в осле работало.. правда проверял я в 8..
а вот в лисице - жопа >_<" ща попробую по другому переделать..
__________________
.ня
|
|
08.02.2010, 23:56
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Хитрый план такой хитрый)))
не гарантирую, что это будет работать в 100% случаев/
var FThread= new function(){
//Version: 3
//Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in'
//License: 'public domain'
//Implementation:
var root= document.documentElement
var FThread= function( proc ){
var thread= root.addEventListener
? function( ){
var res, self= this, args= arguments
root.addEventListener( 'launch thread', function( ){
root.removeEventListener( 'launch thread', arguments.callee, false )
res= thread.proc.apply( self, args )
}, false )
var event= document.createEvent( 'UIEvents' )
event.initEvent( 'launch thread', false, false )
root.dispatchEvent( event )
return res
}
: function( ){
var res, self= this, args= arguments
var image=document.createElement('img');
image.onerror=function()
{
res= thread.proc.apply( self, args )
}
image.src='';//or 'about:blank'
return res
}
thread.proc= proc
return thread
}
//Export: return FThread
//Usage:
var inverse= FThread(function( a ){
if( a === 0 ) throw 'division by zero'
return 1/a
})
alert([ inverse( 0 ), inverse( 1 ) ])
// prints [ undefined, 1 ] and exception 'division by zero' in console log
}
исключение бросается уже как в опере, так и в осле.
DebugBar даже начал отладку
а вот в лисе, исключения не пробрасываются
|
|
09.02.2010, 14:13
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
var FThread= new function(){
Version: 4
Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in'
License: 'public domain'
Implementation:
var scripts= document.getElementsByTagName( 'script' )
var script= scripts[ scripts.length - 1 ]
var starter= document.createElement( 'button' )
starter.id= 'thread starter'
starter.style.display= 'none'
script.parentNode.insertBefore( starter, script )
var FThread= function( proc ){
var thread= function( ){
var res, self= this, args= arguments
starter.onclick= function( ev ){
( ev || event ).cancelBubble= true
starter.onclick= null
res= thread.proc.apply( self, args )
}
starter.click()
return res
}
thread.proc= proc
return thread
}
Export: return FThread
Usage:
var inverse= FThread(function( a ){
if( a === -1 ) throw (void 0)()
if( a === 0 ) throw new Error( 'custom error' )
return 1/a
})
alert([ inverse( -1 ), inverse( 0 ), inverse( 1 ) ])
// alerts ",,1" and two exceptions in console log
}
исключения всплывают везде, только вот кастомные исключения теряют бэктрейс в мозилле и вообще всё в опере
__________________
.ня
Последний раз редактировалось tenshi, 09.02.2010 в 14:32.
|
|
09.02.2010, 14:58
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
с оперой разобрался - нужно было обновить и включить: opera:config#UserPrefs|Exceptions Have Stacktrace
__________________
.ня
|
|
09.02.2010, 18:11
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от tenshi
|
исключения всплывают везде
|
в мозилле твоя третья версия скрипта из первого сообщения в теме не пробрасывала ничего
вторая до правки также
теперь в мозилле пробрасывает.
теперь вообще везде работает.
красота
про click хорошо придумал. для него есть гарантия, что если на протестированном браузере сработал именно так, то так будет всегда, а не зависеть от погоды, как в случае image.onerror у меня
|
|
|
|