Module: @nginstack/engine/lib/object/declareProperty

Methods


<inner> declareProperty(obj, prop, descriptor)

Cria uma propriedade com getter e setter no formato suportado pelo runtime Ije do Engine.

O propósito desta função é implementar parcialmente a funcionalidade do método Object.defineProperty, enquanto ele não é suportado nativamente pelo runtime Ije do Engine.

Diferentemente do comportamento Object.defineProperty, as propriedades criadas substituem a definição anterior e sempre são configuráveis, pois esse é o único comportamento permitido no runtime Ije do Engine. Também por limitações do runtime Ije, as funções getter e setter são definidas como propriedades enumeradas de obj em vez da propriedade declarada, divergindo da especificação EcmaScript e do runtime V8.

O seu uso permite encapsular as definições do getter e setter, além de simplificar o JSDoc ao tornar desnecessário a documentação do getter, do setter e o uso do comentário especial **jsdoc.

Parameters:
Name Type Description
obj Object

Objeto que terá a propriedade criada.

prop string

Nome da propriedade a ser criada.

descriptor PropertyDescriptor

Descrição da nova propriedade. Opções possíveis:

  • get: getter da propriedade. Caso não seja informado, a leitura da propriedade sempre retornará undefined.
  • set: setter da propriedade. Caso não seja informado, a propriedade será somente para leitura.
  • value: valor da propriedade. Não pode ser utilizado conjuntamente com get ou set.
Example
// Crie um comentário JSDoc para documentar a propriedade abaixo. Para fins de documentação,
// ela será uma propriedade normal. No entanto, o defineProperty elimina essa definição
// e cria um getter e, opcionalmente, um setter para ela.
const declareProperty = require('@nginstack/engine/lib/object/declareProperty');

MyClass.prototype.test = 0;
declareProperty(MyClass.prototype, 'test', (function () {
  MyClass.prototype.test_ = '';
  return {
    get: function () { return this.test_; },
    set: function (val) {
      if (val >= 0) {
        this.test_ = val;
      } else {
        throw new Error('Não são permitidos valores negativos.');
      }
    }
  };
})());

Type Definitions


PropertyDescriptor

Type:
  • Object