javascript对象';s-private方法:哪种方法更好

javascript对象';s-private方法:哪种方法更好,javascript,jquery,performance,Javascript,Jquery,Performance,//定义javascript对象私有方法的两种方法中,哪一种更好,特别是在内存管理和性能方面。您的“私有函数1”根本不是私有的。而版本#2已关闭,因此实际上只能通过用户对象访问 通常没有“更好的”,但在这种情况下,封闭函数完全隐藏在外部世界之外(这显然更好) 仍然有谣言说关闭会导致内存泄漏,这是错误的。闭包不会造成内存泄漏,但程序员会/可以。你的例子很好 要使用私有方法,应该使用几乎完全相同的模式 (function () { function User() { //so

//定义javascript对象私有方法的两种方法中,哪一种更好,特别是在内存管理和性能方面。

您的“私有函数1”根本不是私有的。而版本#2已关闭,因此实际上只能通过
用户
对象访问

通常没有“更好的”,但在这种情况下,封闭函数完全隐藏在外部世界之外(这显然更好)

仍然有谣言说关闭会导致内存泄漏,这是错误的。闭包不会造成内存泄漏,但程序员会/可以。你的例子很好

要使用私有方法,应该使用几乎完全相同的模式

(function () {
    function User() {
        //some properties
    }

    //private fn 1
    User.prototype._aPrivateFn = function () {
        //private function defined just like a public function, 
        //for convetion underscore character is added
    }

    //private function type 2
    //a closure
    function _anotherPrivateFunction() {
        // do something
    }

    //public function   
    User.prototype.APublicFunction = function () {

        //call private fn1
        this._aPrivateFn();

        //call private fn2
        _anotherPrivateFunction();
    }

    window.UserX = User;
})();

jQuery的johnresig对如何创建独家新闻/原型制作/继承等做了出色的介绍


如果您必须(或想要)对外界隐藏函数,那么创建闭包会更好

如果您关心以下方面,则向原型添加方法会更好:

  • 内存,因为 实例将共享相同的 (单个)功能而不是创建 一个一个
  • 可测试性,因为 无法测试隐藏的函数 封闭的内部

  • 很可能依赖于浏览器。令人遗憾的是,使用第二种方法需要在范围链中多走一步,因此(可能不明显)速度较慢。但你有更多的控制权。我同意1不是私人的。但我只想知道,在原型中添加方法或创建闭包时,哪种方法更好。
    var myObject = function() {
        // privates
        var a = 5,
            b = 10,
            c = a,
            public = {};
    
        public.getA = function() {
            return a;
        };
        public.setA = function(v) {
            a = v;
        };
    
        function privateOne() {
        }
    
        return public;
    };