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)
我们不关心隐藏公共信息,因为源是开放的,并且由客户即时解释。
通常不使用属性(它们也很慢),并且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。可以访问该属性,但是开发人员应意识到,如果对其进行修改,则会破坏状态。