在Javascript中,访问私有成员的成员方法是否可以写在类的原型中?


譬如我有一个Person类,拥有name这一私有属性。

// Javascript code:
function Person(theName) {
    var name = theName; // 对象的私有成员
    this.getName = function () { // 访问私有成员的成员方法写在对象中是没有问题的。
        return name;
    };
}

Person.prototype.setName = function (newName) {
    // 访问私有成员的成员方法是否可以写在类的原型中?
};

是不是需要访问到私有成员的成员方法都不能写在原型里?
但是这样又会造成资源的浪费,有没有两全其美的方法?

后来试过了做类构造的闭包,写成了这样:

// Javascript code:
var Person = (function () {
    var name;
    var P = function (theName) {
        name = theName;
        this.getName = function () {
            return name;
        };
    };
    P.prototype.setName = function (newName) {
        name = newName;
    };
    return P;
}());

很显然name变成了静态私有变量而不是成员私有变量。
虽然可以创建静态字典,但是代码的可读性会降低。
有没有其它的解决方法?

oop JavaScript

Musroom 11 years, 6 months ago

一般采用约定,js不适合做这种强制限制,对性能和可读性都有影响。

通用约定,一般是第一个字符是下划线的是私有方法和私有变量,外部不能调用。当然只是约定。。。。

前端在实施的过程中,约定和规范很重要,比任何语言都重要。
一般一个团队一开始,做的第一项工作就是规范制定,之后就要遵循这些约定,否则很容易把前端代码写乱。
既然系统不给我们太多限制,我们就需要自己来限制自己。

两边都看不见啦 answered 11 years, 6 months ago

Your Answer