如何使原型模式的私有功能成为事件的接收者?到目前为止,我只能使用公共函数作为调解器。有更直接的方法吗?
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'
});
})
---编辑---
好的,我现在看到我可以这样做了:
$('body').on('test', function(evt) {
_talk.call(this, evt);
}.bind(this));
......但它仍然感觉笨拙
答案 0 :(得分:2)
如果函数在对象的原型链中,无论如何都可以绑定它。
因此,没有什么可以阻止您将_talk
函数绑定到Person
的实例。
var Person = (function() {
function Person(name) {
console.log('listening...', $('body')[0])
this.name = name;
$('body').on('test', _talk.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'
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>