2011-08-03 18 views
14

Estoy intentando definir un objeto y crear una propiedad de acceso para él.Error en la propiedad del descriptor de acceso: no se puede redefinir el estado de la propiedad no configurable

HTML:

<input type='hidden' id='crudMode' value='Create' /> 

JavaScript:

crudMode = { 
    create: "Create", 
    read: "Read", 
    update: "Update", 
    delete: "Delete", 
    current: function() { return $('#crudMode').val(); } 
} 

Object.defineProperty(crudMode, 'mode', { 
    get: function(){ 
     return this.current(); 
    }, 
    set: function(value){ 
     $('#crudMode').val(value); 
    } 
}); 

Pero cuando lo uso, que arroja el error mencionado en el título de la pregunta:

console.log(crudMode.mode); 

Lanza:

TypeError: can't redefine non-configurable property 'mode'

¿Qué pasa aquí?

Respuesta

20

La documentación de MDC dice que, además de 'obtener' y 'establecer', necesita un marcador 'configurable' configurado en verdadero cuando se llama a Object.defineProperty.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

+3

¿Puedo anular la propiedad que una vez que se ha establecido no configurable? –

+4

@ TomášZato la respuesta a su pregunta se encuentra en la documentación principal vinculada anteriormente. Una vez que se ha definido una propiedad con 'configurable' establecido en' false', la propiedad no se puede modificar ni eliminar. –

Cuestiones relacionadas