在JavaScript中构建类的正确方法?

Eri*_*pir 6 javascript prototype-programming

我是JavaScript的新手,并试图理解我应该如何编写类(我的背景是'常规'OO语言,例如java和c ++).

我知道我有两个选择:

  1. 如果我希望我的类有私有方法和成员,我无法在原型中定义它们.但在这种情况下,它们将为每个创建的新对象(内存问题)构建.

  2. 如果我在类原型中定义方法,我将没有封装(这对我来说很奇怪,作为java/c ++开发人员:P).

您使用哪两种方法?为什么?

Kev*_*son 7

所以,我不认为对这个问题有一个"正确的答案"...它基本上是你喜欢的,并且认为最适合你的特定用途.我的许多课程都是"静态课程",例如

var MyClassName = {
    methodName: function() { },
    //...
}
Run Code Online (Sandbox Code Playgroud)

因为我永远不需要实例化它们.当我需要实例化多个实例时,我使用原型方法.

如果您需要私有变量,您可以定义一个函数/类来执行私有变量,以及需要访问该函数/类中的私有变量的方法.然后,对不需要访问私有变量的所有方法使用prototype方法.例如

var PageClass = function() {
    var _birthdate;

    this.getBirthdate = function() {
        return typeof(_birthdate) == "undefined" ? null : _birthdate;
    }
    this.setBirthdate = function( date ) {
        if( typeof(date) == 'object' && date.constructor == Date ) {
            _birthdate = date;
        }
        else {
            throw "Invalid Argument Exception: PageClass.setBirthdate expects parameter of type 'Date'";
        }
    }
}
PageClass.prototype.doSomething = function() {
    alert("DOING SOMETHING");
}
Run Code Online (Sandbox Code Playgroud)

同时执行这两个操作应该可以使您的实例化更轻一些,但仍然会给您一些封装.到目前为止,我从未对私人变量感到烦恼.