gpt4 book ai didi

javascript - 如何将私有(private)函数绑定(bind)为回调

转载 作者:行者123 更新时间:2023-11-29 21:15:45 26 4
gpt4 key购买 nike

如何使原型(prototype)模式的私有(private)函数成为事件的接收者?到目前为止,我只能使用公共(public)功能作为中介来做到这一点。有更直接的方法吗?

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));

...不过还是觉得笨拙

最佳答案

函数是否在对象的原型(prototype)链中并不重要,无论如何您都可以绑定(bind)它。

所以没有什么能阻止您将 _talk 函数绑定(bind)到 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>

关于javascript - 如何将私有(private)函数绑定(bind)为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com