Property descriptors should be defined properly
- BAD_PROPERTY_DESCRIPTOR
- Error
- High
- No tags
This rule applies when an invalid property descriptor is used at Object.defineProperty() or Object.defineProperties().
Property descriptors can define either a regular data property or an accessor property having a getter or setter function.
When defining an accessor, caution is needed as TypeError exceptions occur in the following cases:
- The getter or setter is specified with a non-function value except undefined.
- A valueorwritableattribute which applies only to data descriptors is also specified.
Note that the writable attribute is meaningless for an accessor because an accessor is inherently non-writable when the setter is not defined.
Noncompliant Code Example
View with compliant examples side by side// Example 1
Object.defineProperty(obj, "prop1", {
  get: 42, // BAD_PROPERTY_DESCRIPTOR alarm because '42' is not a function.
  set: function (x) {
    doSomething(x);
  }
});
// Example 2
Object.defineProperty(obj, "prop2", {
  get: function() {
    return 42;
  },
  writable: false // BAD_PROPERTY_DESCRIPTOR alarm because 'writable' cannot be specified for an accessor.
});Compliant Code Example
View with noncompliant examples side by side// Example 1
Object.defineProperty(obj, "prop1", {
  get: function () {
    return 42;
  },
  set: function (x) {
    doSomething(x);
  }
});
// Example 2
Object.defineProperty(obj, "prop2", {
  get: function() {
    return 42;
  }
});Version
This rule was introduced in DeepScan 1.32.0.