如果可能的话,我想定义一个javascript对象,它具有一些属性以及这些属性的getter / setter,但我不希望其他人能够在不扩展对象的情况下向对象添加新属性定义(类似于如何在Java / C#中定义类)。这可能与javascript有关吗?
答案 0 :(得分:1)
您可以使用“preventExtensions”方法。
var obj = { foo: 'a' };
Object.preventExtensions(obj);
答案 1 :(得分:0)
通过以下方式,您可以冻结对象的实例,但保持open对继承类以添加它们自己的属性:
function Animal(name, action) {
this.name = name;
this.action = action;
if (this.constructor === Animal) {
Object.freeze(this);
}
}
var dog = new Animal('rover', 'bark')
dog.run = function(){console.log('I\'m running!')} // throws type error
function Dog(name, action, bark) {
Animal.call(this, name, action)
this.bark = bark // Animal not frozen since constructor is different
Object.freeze(this)
}
var puppy = new Dog('sparky', 'run', 'woof')
puppy.isTrained = false; // throws type error