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

时间:2011-01-10 08:12:42

标签: javascript jquery performance

(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;
})();

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

3 个答案:

答案 0 :(得分: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;
};

答案 1 :(得分:5)

如果您绝对必须(或想要)隐藏来自外部世界的函数,那么创建闭包会更好。

如果你关心的话,在原型中添加方法会更好:

  1. 内存,因为这一切 实例将共享相同的内容 (单一)功能而不是创造 一个一个。
  2. 可测试性,因为你 无法测试隐藏的功能 关闭内部。

答案 2 :(得分:1)

jQuery的John Resig对如何创建scoop / prototyping / inherits等进行了精彩的演示。

http://ejohn.org/apps/learn/