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
value
orwritable
attribute 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.