gpt4 book ai didi

javascript - 为什么这个私有(private)方法在构造函数中?

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:54 26 4
gpt4 key购买 nike

尽管我一直在研究“this”,但我对遇到的这种编码模式感到有些困惑。以下(简化的)代码显示了该模式:

var MyConstructor = function MyConstructor() {
this._handlers = {
action: this.handleAction.bind(this)
};
};

MyConstructor.prototype.start = function(someObj) {
this.someObj.on(’some event’, this._handlers.action); //<--here
}

MyConstructor.prototype.handleAction = function() {
//do stuff
}

module.exports = MyConstructor;

我的问题是,为什么需要构造函数中的私有(private)方法?这种模式是否避免了一些常见问题?该行是否可以注释 //<--here只是:

this.someObj.on(’some event’, this.handleAction);

最佳答案

不,它们是不同的。不同之处在于 context,这意味着 this 在函数中的值。

this.handleAction 在没有任何上下文的情况下将函数传递给 on。没有指定 this 的值。该值将在执行函数时确定。该值很可能不是 MyConstructor 对象,因此例如 this.start 不会引用正确的对象,或者实际上可能是任何对象。

解决方案是绑定(bind)上下文。这将永远设置上下文,因此 this 将始终引用正确的值。你看到这行代码:

action: this.handleAction.bind(this)

这意味着,当代码稍后引用 this._handlers.action 时,它将使用适当的上下文将函数发送到 on,因此 this 将始终指向正确的值。

关于javascript - 为什么这个私有(private)方法在构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19949904/

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