如何定义不可扩展的javascript对象

时间:2014-10-14 20:34:49

标签: javascript class object

如果可能的话,我想定义一个javascript对象,它具有一些属性以及这些属性的getter / setter,但我不希望其他人能够在不扩展对象的情况下向对象添加新属性定义(类似于如何在Java / C#中定义类)。这可能与javascript有关吗?

2 个答案:

答案 0 :(得分:1)

您可以使用“preventExtensions”方法。

var obj = { foo: 'a' };
Object.preventExtensions(obj);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions

答案 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

见这里:http://www.2ality.com/2013/06/freezing-instances.html