2
プロトタイプパターンのプライベート関数をイベントの受信者にするにはどうすればよいですか?これまでは、私はメディエーターとしての公的な機能を使ってのみこれを行うことができます。これを行うより直接的な方法はありますか?プライベート関数をコールバックとしてバインドする方法
https://plnkr.co/edit/9viJKqdczvfBqgxWG1qW?p=preview
var Person = (function() {
function Person(name) {
console.log('listening...', $('body')[0])
this.name = name;
$('body').on('test', this.onTest.bind(this));
}
Person.prototype.onTest = function(evt) {
_talk.call(this, evt);
}
function _talk(evt) {
console.log(this.name + ' says: ' + evt.payload)
}
return Person;
}());
$(function() {
var p = new Person('Bob');
$('body').trigger({
type: 'test',
payload: 'hello'
});
})
--- EDIT ---
[OK]を、ので、私は今、私はこれを行うことができます参照してください。
$('body').on('test', function(evt) {
_talk.call(this, evt);
}.bind(this));
...しかし、それはまだ不器用な感じ
あなたは_really_それを行うことはできません。並べ替え関数は外部から見えるかどうかです。あなたはそれを "公開"してそれに固執するか、それを条件付きで公開しようとすることができます。どういうわけか。基本的に何らかの 'if(inTest)'を持って関数を公開することになります。私はあなたがプロキシでファンキーなことをすることができると思うが、それはそれが価値があるより複雑さとリスクを増やすと感じている。私は個人的に機能を公開したいが、他の人はそれに同意しないだろう。 – vlaz