防止动态添加“实例变量”Javascript OOP的能力

时间:2010-02-08 04:35:52

标签: javascript oop

我想知道是否有办法在javascript中禁止以下内容:

var c = new Circle(4);
c.garbage = "Oh nooo!"; // Prevent this!!

有什么想法吗?

编辑:我刚刚放弃了这个,但我决定检查一下众神做什么(jQuery开发团队)..他们是如何做到这一点的?

$('#Jimbo').hello = "hi!";
alert($('#Jimbo').hello); // undefined

编辑2:愚蠢的错误..如果你这样做:

var hi = $('#Jimbo');
hi.hello = "hi!";
alert(hi.hello); // You get "hi!"

谢谢, 马特穆勒

3 个答案:

答案 0 :(得分:4)

不,没有。 Javascript允许动态添加成员,并且没有钩子来阻止它。

答案 1 :(得分:2)

据我所知(我可能错了)......没有办法阻止这种情况。这就是拥有一种“动态”语言的观点...如果有人写了一个拼写错误或者在一个随机字段上添加了那就是生命......

答案 2 :(得分:2)

ECMAScript 5定义了Object.preventExtensions,它可以阻止将新属性添加到您的宝贵对象中:

var c = new Circle(4);
Object.preventExtensions(c); // prevents new property additions on c
c.garbage = "Oh nooo!"; // fail

规范还定义了Object.sealObject.freeze,它们分别阻止了属性删除和属性变异。更多信息hereECMA-262, 5th edition(pdf)。

当然,这对你来说根本没有意义,但正是你所追求的:)