在 Javascript 中访问私有成员的更好方法

2023-11-23

阅读了一些关于 Javascript 的内容后原型继承模型,我改变了构建类的风格

var Some_Class = function() {
    this.public_method = function() {
    };
    (function() {
        // constructor
    }).call(this)
}

to

var Some_Class = function() {
    (function() {
        // constructor
    }).call(this)
}
Some_Class.prototype.public_method = function() {
};

虽然我知道这是一个很好的做法,但我不再允许从公共方法访问私有方法

var Some_Class = function() {
    var private_member = 'whatever';

    (function() {
        // constructor
    }).call(this)
}
Some_Class.prototype.public_method = function() {
    return private_member; // not possible
};

读完一篇文章后here(闭包创建的构造函数),然后我想出了这个

var Some_Class = function() {
    var private_member = 'whatever',

    private_method = function(_some_value) {
        // private method implementation
    };

    if(!arguments.callee.prototype.public_method) {
        arguments.callee.prototype.public_method = function() {
            private_method.call(this, private_method);
        };
    }

    (function() {
        // constructor
    }).call(this)
}

然而,这样做有什么缺点呢?或者如果我想访问有更好的方法吗私人会员在公共方法中?


我的答案是否定的:没有内置的private在 JavaScript 中访问但这没关系,因为YAGNI。这是我的制作方法private我的代码中的成员:

function Some_Class() {
    this._private_member = 'whatever';
}

Some_Class.prototype._private_method = function() {
};

这就足够了。当唯一的真正目的是跳过障碍时,真的不值得private是保护自己免受……自己的伤害。

(我说这是我自己花了很多时间玩弄闭包和原型设计的每一种排列,就像你一样,最后说“管它,这不值得”。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中访问私有成员的更好方法 的相关文章

随机推荐