为什么插件经常会避免功能的正确私有化?

时间:2017-05-24 10:51:33

标签: javascript

我经常在插件中看到使用下划线来表示某个函数是私有的,但仍然允许公共访问(请参阅下面的示例)。但为什么?我们可以使用.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()

1 个答案:

答案 0 :(得分:0)

我这样做的主要原因是调试更容易。

从我所看到的,目前的JS调试器并不擅长检查封闭符号,特别是当编译器设法优化闭包时。

使用下划线约定,您可以在时间艰难时可靠地访问这些“私有”函数,而下划线明显表明它们只是用于内部使用