Показать сообщение отдельно
  #28 (permalink)  
Старый 09.02.2010, 14:13
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 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.
Ответить с цитированием