我经常在插件中看到使用下划线来表示某个函数是私有的,但仍然允许公共访问(请参阅下面的示例)。但为什么?我们可以使用.call,.apply或.bind来控制“this”关键字,或者使用“自我”模式,根据此问题可以快60%:Will Function.prototype.bind() always be slow?
是懒惰的编程还是我错过了什么?
私人功能曝光示例:
var simplifiedPlugin = function() {
this.name = 'simples';
this._privateFunc = function() {
console.log('Why am I here?');
}
this.publicFunc = function() {
// stuff, then
this._privateFunc();
}
}
var pluginInstance = new simplifiedPlugin();
使用自我模式:
var selfSimplifiedPlugin = function() {
var self = this;
this.name = 'self is also simples';
function _privateFunc() {
console.log('Nobody knows am I here');
//I can use self instead of this
}
this.publicFunc = function() {
// stuff, then
_privateFunc();
}
}
var anotherInstance = new selfSimplifiedPlugin();
所以,我的观点是自我模式,私有函数仍然可以使用这个上下文,你只需要使用self.fn()而不是this.fn()
答案 0 :(得分:0)
我这样做的主要原因是调试更容易。
从我所看到的,目前的JS调试器并不擅长检查封闭符号,特别是当编译器设法优化闭包时。
使用下划线约定,您可以在时间艰难时可靠地访问这些“私有”函数,而下划线明显表明它们只是用于内部使用。