javascript对象的 - 私有方法:哪种方式更好

Pra*_*sad 4 javascript performance jquery

(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;
})();
Run Code Online (Sandbox Code Playgroud)

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

jAn*_*ndy 12

您的"私人功能#1"根本不是私密的.版本#2已关闭,因此只能通过您的User对象访问.

通常没有"更好",但在这种情况下,在这种情况下,封闭的功能完全隐藏在外部世界(这显然更好).

仍然有传言说闭包会造成内存泄漏,这是错误的.闭包不会造成内存泄漏,但程序员可以/可以.你的例子完全没问题.

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

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;
};
Run Code Online (Sandbox Code Playgroud)


Jak*_*kob 5

如果您绝对必须(或想要)将函数隐藏在外界之外,则创建闭包会更好。

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

  1. Memory,因为这样所有实例将共享相同(单个)功能,而不是每个实例都创建一个。
  2. 可测试性,因为您无法测试隐藏在闭包内部的函数。