您可以使用defineProperty什么会员要进行安全.
Mike提到configurable了防止重新定义的属性 - 删除.我也加了这个.
function final(obj, members) {
for (var i = 0; i < members.length; i++) {
var m = members[i];
if (obj.hasOwnProperty(m)) {
Object.defineProperty(obj, m, {
value: obj[m],
writable: false,
configurable: false
});
}
}
return obj;
}
var obj = { foo: "bar" };
obj = final(obj, ["foo"]);
obj.foo = ""; // output will be empty but
obj.foo // now output's still bar.
Run Code Online (Sandbox Code Playgroud)
Object.freeze.但它确保了所有成员的对象.
var obj = { foo: "bar" };
obj = Object.freeze(obj);
obj.foo = ""; // output is empty
obj.foo // output is still "bar".
Run Code Online (Sandbox Code Playgroud)
在传统意义上,不,你不能拥有私有/受保护的方法或阻止它们被覆盖.
但是,您可以做的是将方法封装在范围内,然后不公开它们:
function foo(){
function bar(){
// private function
}
this.doSomething = function(){
bar();
}
}
Run Code Online (Sandbox Code Playgroud)
那就是你能得到的尽可能接近.我刚才写了一篇文章:http://www.htmlgoodies.com/primers/jsp/article.php/3600451/Javascript-Basics-Part-8.htm
您也可以使用__defineGetter__和__defineSetter__阻止访问,但这些不是100%跨浏览器.
var x = {};
x.__defineGetter__('foo', function(){ return 10; });
x.__defineSetter__('foo', function(){});
x.foo = 'bar';
x.foo; // 10
Run Code Online (Sandbox Code Playgroud)