Comment on page
Aggregated Properties
Discusses the purpose and use of aggregated properties
As you have learned in Classes and Instances, it is possible to both define a class, and then extend the class to create a new class. This is our implementation of inheritance from object-oriented programming. When you extend an existing class, however, the extended class overwrites the values of the base class. This happens for both data properties and methods.
When a method overwrites the method from its base class, you can use the
_super
method to pass execution to the base class. But, when a data property overwrites its corresponding data property on the base class, the data property on the base class is not easily accessible. What about when you do not want to overwrite the data property on the base class, but extend it—similar to how we extend class?By default, data properties from an extended class hide the data properties on its base class, making them hard to access.
This is where aggregated properties come into the picture. The purpose of an aggregated property is to combine the property of the base class with that of the extended class. This allows the data properties to be extended in a similar manner to how a class definition is extended.
Our object model supports the following types of aggregated properties:
Concatenated properties apply to array data properties. You use the
concatProperties
property on the class definition to define the list of properties that should be concatenated instead of overwritten.const Person = BO.extend ({
concatProperties: ['greetings'], // Define the concatenated properties
greetings: ['Hello']
});
const Student = Person.extend ({
greetings: ['YOLO']
});
let person = new Person ();
console.log (person.greetings); // ["Hello"]
let student = new Student ();
console.log (student.greetings); // ["Hello", "YOLO"]
The concatenated properties also apply when initializing a created object.
Merged properties apply to plain JavaScript object data properties. You use the
mergedProperties
property on the class definition to define the list of properties that should be merged instead of overwritten.const Person = BO.extend ({
mergedProperties: ['capabilties'], // Define the merged properties
capabilties: {
a: { a: 1, b: 3}
b: { a: 6 }
}
});
const Student = Person.extend ({
capabilties: {
a: { a: 3, c: 5}
c: { a: 1 }
}
});
let person = new Person ();
console.log (person.capabilities); // {a: { a: 1, b: 3}, b: {a: 6} }
let student = new Student ();
console.log (student.capabilities); // {a: { a: 3, b: 3, c: 5}, b: {a: 6}, c: { a: 1 }}
The merged properties also apply when initializing a created object.
Last modified 5yr ago