Mat*_*och 12 javascript final immutability
我想使对象的结构不可变,防止其属性随后被替换.但是,属性需要是可读的.这可能吗?
我确信没有语言功能(final在Java和readonlyC#中都有)来支持这一点,但是想知道是否可能有另一种机制来实现相同的结果?
我正在寻找这些方面的东西:
var o = {
a: "a",
f: function () {
return "b";
}
};
var p = o.a; // OK
o.a = "b"; // Error
var q = o.f(); // OK
o.f = function () { // Error
return "c";
};
Run Code Online (Sandbox Code Playgroud)
你可以做的最好的事情是隐藏你的属性在一个闭包内.
var getMap = function(){
var hidden = "1";
return {
getHidden : function() { return hidden; }
}
}
var f = getMap ();
alert(f.getHidden());
Run Code Online (Sandbox Code Playgroud)
我捅了一下.在上面的代码中,您不仅需要返回隐藏,而且可能将其复制到新对象中.也许你可以使用jquery的扩展来为你做这个,所以你将返回一个新对象,而不是引用.虽然=)这可能是完全错误的
使用var中的对象的构造函数将创建一个私有变量.这基本上是一个封闭.然后,您可以创建一个公共函数来访问/修改它.Douglas Crockford 在Javascript中提供的私人会员的更多信息和示例.