JavaScript中公共字段的可接受性

3 javascript oop public-fields

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

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

“私人的”:

var Class = function()
{
    var field = null;
    this.getField = function() { return field; };
    this.setField = function(value) { field = value; };
};
Run Code Online (Sandbox Code Playgroud)

上市:

var Class = function()
{
    this.field = null;
};
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 5

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

通常不使用属性(它们也很慢),并且getter函数也不常见。privateJavascript中没有关键字,因此将每个可公开访问的道具包装在getter / setter方法对中将是过大的。

只需将属性写入对象即可。

通常的做法是,甚至是约定俗成的,都在内部属性之前加上,_以指示调用者不打算更改或检查它们。

例如 :

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];
    }
};
Run Code Online (Sandbox Code Playgroud)

该代码显示了一个公共方法meta和一个内部属性_meta。可以访问该属性,但是开发人员应意识到,如果对其进行修改,则会破坏状态。