不解释,ES3时代的经典做法
(function() {
    // 私有静态成员
    var user = "";
    
    // 私有静态方法
    function privateStaticMethod(){
    }
    Box = function(value){
        // 私有成员
        var privateUser = value; 
        
        // 这个是私有方法
        function privateMethod(){
        }
        
        // 公有方法,因为能访问私有成员,也可以说是特权函数,也可以说是实例方法
        this.getUser = function(){
            return user;
        };
        
        // 公有成员
        this.user = 1;
    };
    
    // 公有共享方法
    Box.prototype.sharedMethod = function () {};
    
    // 公有共享属性
    Box.prototype.sharedProperty = 1;
    // 公有静态方法 
    Box.staticMethod = function(){};
    
    // 公有静态成员
    Box.staticProperty = 1; 
})();
时过境迁,下面来看看在ES6+中如何实现
(function() {
    // 私有静态成员
    var user = "";
    
    // 私有静态方法
    function privateStaticMethod(){
    }
    class Box {
        // 私有成员,等同于 constructor内部,提案写法,stage-3
        #privateUser = 1;
        // 公有成员,等同于 constructor内部,提案写法,stage-3
        user1 = 1;
        constructor() {
            // 私有成员
            var privateUser = value;
            // 这个是私有方法
            function privateMethod(){
            }
            // 公有方法,因为能访问私有成员,也可以说是特权函数,也可以说是实例方法
            this.getUser = function(){
                return user;
            };
            // 公有成员
            this.user2 = 1;
        }
        // 公有共享属性
        sharedProperty: 1
        // 公有共享方法
        sharedMethod() {}
        
        // 公有静态方法
        static staticMethod1() {}
        
        // 公有静态成员,提案写法,stage-3
        static staticProperty1 = 1;
    }
    
    // 公有静态方法,和上面写法等同
    Box.sharedMethod2 = function() {};
    // 公有静态成员,和上面写法等同
    Box.staticProperty2 = 1;
})();
总结
更多js面向对象相关内容请看:
原文网址:http://yanhaijing.com/javascript/2014/05/15/a-code-explain-javascript-oop/