пол 6го утра, мне сейчас всё кажется прикольным.
всё я баиньки. |
|
Цитата:
Ладно, я вас понял. Если написать bind для ишака, то можно вполне сносно работать. Спасибо за ответы |
iMaxmaxmaximus, само-собой в контексте )
Просто когда по незнанию писал все в конструкторе, то мой способ решал вопрос и я перестал задумываться об этом. Потом вот всплыла эта интересная особенность ecma |
> То есть ты не должен создавать ни какие промежуточные анонимные функции внутри метода addListener. так как это быдлокод.
bind как раз и создаёт "промежуточную анонимную функцию". причём делает это _каждый раз_. |
Цитата:
<script>
function Method( func ){
return function Method_instance( ){
var args= [ this ].concat( [].slice.call( arguments ) )
return func.apply( null, args )
}
}
function Trait( scheme ){
var trait= function Class_trait( ){
throw new Error( 'Trait can not be instantiate. Create a Class, please.' )
}
trait.scheme= scheme
return trait
}
function Class( scheme ){
var factory= function Class_factory( ){
var obj= new Instance
var init= obj.Class_init
if( init ) init.apply( obj, arguments )
return obj
}
var proto= factory.prototype
factory.scheme= scheme
scheme( proto, factory )
var Instance= function Class_Instance( ){ }
Instance.prototype= proto
for( var key in proto ){
if( !proto.hasOwnProperty( key ) )
continue
var value= proto[ key ]
if( typeof value === 'function' )
value= Method( value )
proto[ key ]= value
}
return factory
}
// проверяем:
var Man= Class( function Man_scheme( man, Man ){
Man.toString= function( ){
return 'Man'
}
man.name= ''
man.Class_init= function( man, name ){
man.name= name
}
man.toString= function( man ){
return 'Man: ' + man.name
}
})
var Screamer= Trait( function Screamer_scheme( screamer, Screamer ){
screamer.scream= function( screamer ){
alert( screamer + '!' )
}
screamer.screamOn= function( screamer, eventName ){
window.addEventListener
( eventName
, function( event ){
screamer.scream()
}
, false
)
}
})
var Baby= Class( function Children_scheme( baby, Baby ){
Man.scheme.apply( null, arguments )
Screamer.scheme.apply( null, arguments )
Baby.toString= function( ){
return 'Baby'
}
baby.toString= function( children ){
return 'Baby: ' + children.name
}
})
var jim= Baby( 'Jim' )
jim.screamOn( 'load' )
</script>
|
Цитата:
вот только если использовать в качестве колбэка функцию для этого не предназначенную - будет по уебански работать, что гораздо хуже. а если заводить для колбэка отдельную функцию, то какая разница описывать её методом объекта или замыканием внутри другого метода? |
... и как только топик стартер столкнулся с этим вопросом, он начал постигать функциональную природу JS
|
> че за херь? обрами нормальными тегами [js]
тебе надо - ты и обрамляй) > разница в красоте кода. какая разница писать очевидным кодом или не очевидным? биндинг функции к контексту это процедура, и она имеет название, она должна быть где-то описана и потмо вызвана. она не должна быть в коде без названия если это конечно не быдлокод, в данном случае мы выносим её в метод бинд. у тебя биндинг головного мозга) вот я привёл пример кода, куда ты тут всунешь свой bind и зачем? |
ну и дурак)
|
| Часовой пояс GMT +3, время: 05:02. |