代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken

为什么要使用非特权方法?

  •  5
  • Aaron Yodaiken  · 技术社区  · 15 年前

    我正在学习JavaScript,我不明白为什么要创建非“特权”的方法,也就是说,这些方法不是在构造函数中定义的,而是在类的原型中定义的。

    我理解封装的概念,但是在大多数面向对象的世界中,你从不封装类的其他部分。

    1 回复  |  直到 15 年前
        1
  •  18
  •   Greg    15 年前

    var myClass = function() {
        // private variable
        var mySecret = Math.random();
    
        // public member
        this.name = "Fred";
    
        // privileged function (created each time)
        this.sayHello = function() {
            return 'Hello my name is ' + this.name;
            // function also has access to mySecret variable
        };
    }
    

    在原型上定义函数时,只创建一次函数,并共享该函数的单个实例。

    var myClass = function() {
        // private variable
        var mySecret = Math.random();
    
        // public member
        this.name = "Fred";
    }
    
    // public function (created once)
    myClass.prototype.sayHello = function() {
        return 'Hello my name is ' + this.name;
        // function has NO access to mySecret variable
    };
    

    因此,在原型上定义一个函数会产生更少的对象,从而提供更好的性能。另一方面,公共方法不能访问私有变量。更多的例子和推理可以在这里找到: http://www.crockford.com/javascript/private.html