3

我只是想知道公共字段(即那些不在构造函数闭包内的字段)在 JavaScript 中是否可以接受。虽然通常的口头禅是“不要使用公共字段,使用访问器或属性”,但我注意到属性尚未在所有浏览器 (IE) 中得到广泛支持。

与 JavaScript 的“一切都是公共的”类似的其他语言,如 Python,似乎不太关心信息隐藏和公共字段,即使是那些没有用属性修饰的语言。那么,可以在 JavaScript 中执行此操作吗?

例子

“私人的”:

var Class = function()
{
    var field = null;
    this.getField = function() { return field; };
    this.setField = function(value) { field = value; };
};

上市:

var Class = function()
{
    this.field = null;
};
4

2 回答 2

5

我们不关心隐藏公共信息,因为源是开放的,并由客户即时解释。

属性不常用(它们也很慢),getter 函数也不常见。Javascript中没有private关键字,因此将每个可公开访问的 prop 包装在 getter/setter 方法对中将是多余的。

只需为您的对象写出属性。

这是一种常见的做法,甚至可能是一种约定,在内部属性前面加上 a_表示它们不打算被调用者更改或检查。

例如 :

function Foo() { 
    this._meta = {};  // internal use only
    this.prop2 = {};  // public use ok
}

Foo.prototype.meta = function(key, val) {
    if (val !== undefined) {
        this._meta[key] = val;
    } else {
        return this._meta[key];
    }
};

此代码显示了一个公共方法meta和一个内部属性_meta。可以访问该属性,但开发人员应该意识到,如果他们修改它,可能会破坏状态。

于 2011-05-09T00:26:55.380 回答
1

JavaScript 是 JavaScript,而不是任何其他语言。来自 Java 的人倾向于认为一切都应该像 Java 一样工作。那是错误的。JavaScript 实际上与 Java 相距甚远,以至于它们的结构规则几乎没有相似之处。JavaScript 是一种面向原型、松散类型的函数式语言,因此它可以在一定程度上模仿 Java,但完全没有理由这样做。一般来说,如果你没有找到关于 JavaScript 的某个口头禅的跨语言、常识性的原因,请忽略它。

于 2011-05-09T00:37:45.140 回答