javascript - 面向对象的Javascript : Should Private Functions Be Added to Class Prototype?

标签 javascript oop

背景

在过去的几个月里,我一直在使用 OOP 风格的 Javascript,从剖析开源库开始。看起来他们大多遵循相同的模式,除了我已经看到两种处理私有(private)函数的方法,我想知道哪种是最好的(最佳实践中最好,或者由于我可能不知道的原因更好)。

示例代码

下面是我正在使用的模式的一个非常精简的框架。如果您注意到,有两种不同形式的私有(private)函数。

第一个像公共(public)函数一样附加到原型(prototype),但以 _ 为前缀。

第二个只是一个作用域只能由类访问的函数。

(function(window) {

    window.FooBarClass = (function() {

        var Class = function( params ) {

            this._init( params );

        }

        /***************************************/
        /************* INITIALIZE **************/
        /***************************************/

        Class.prototype._init = function( params ) {

            // DO SETUP STUFF

        };

        /***************************************/
        /********** PUBLIC FUNCTIONS ***********/
        /***************************************/

        Class.prototype.doThings = function() {

            // DO STUFF

        };

        /***************************************/
        /****** PRIVATE FUNCTIONS 1ST WAY ******/
        /***************************************/

        Class.prototype._createSection = function( params ) {

            // DO STUFF

        };

        /***************************************/
        /****** PRIVATE FUNCTIONS 2ND WAY ******/
        /***************************************/

        function correctTwoDigitYear( variable ) {

            // DO STUFF

        }

        return Class;

    }());

}(window));

问题

哪一个更好,为什么?

最佳答案

JS 实际上并没有私有(private)方法,尽管如您所见,您可以通过关闭作用域来限制对函数和变量的访问。

最后,如果它在原型(prototype)上,它就不是私有(private)的——不管命名约定如何(前导下划线等)。因此,如果您真的想限制对某些东西的访问,请不要将它放在原型(prototype)上。

关于javascript - 面向对象的Javascript : Should Private Functions Be Added to Class Prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677106/

相关文章:

javascript - javascript严格模式下oop函数的全局初始化

php - 静态方法与静态实例

javascript - 暂停 Controller 并等待服务响应

javascript - 在 WordPress 中添加带有简码的联系表单 ajax

javascript - 如何 "extend"现有类的现有方法?

c++ - 如何创建可以使用字符串参数自动初始化其他类的类

javascript - 如何在 Express 中修复此 ES6 promise 链?

asp.net 从数据库传递 javascript 代码

php - protected 突变体(setters)

java - 提高类的内聚和耦合