Otherwise, repeated lookups of undefined properties always trigger the
comparatively expensive resolution. This can be the case for example in
_calculateBarIndexPixels() in controller.bar.js when looking up
options.skipNull and options.maxBarThickness, which is done for each bar
in a bar chart.
const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters';
function _cached(target, prop, resolve) {
- let value = target[prop]; // cached value
- if (defined(value)) {
- return value;
+ if (Object.prototype.hasOwnProperty.call(target, prop)) {
+ return target[prop];
}
- value = resolve();
-
- if (defined(value)) {
- // cache the resolved value
- target[prop] = value;
- }
+ const value = resolve();
+ // cache the resolved value
+ target[prop] = value;
return value;
}