为什么要制作非特权方法?

时间:2010-06-18 01:30:21

标签: javascript

我正在学习JavaScript,我无法理解你为什么要创建没有“特权”的方法,也就是说,没有在构造函数中定义,而是在类'原型中定义。

我理解封装的想法和所有,但你绝不会在OO世界的大部分时间里将其他部分封装起来。

1 个答案:

答案 0 :(得分:18)

在构造函数中定义函数时,每次调用构造函数时都会创建该函数的新实例。它还可以访问私有变量。

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