-
Notifications
You must be signed in to change notification settings - Fork 0
/
ancestors.js
27 lines (23 loc) · 880 Bytes
/
ancestors.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Implement an ancestors method that returns the prototype chain (ancestors) of a calling
// object as an array of object names. Here's an example output:
Object.prototype.ancestors = function () {
let results = [];
let ancestor = this;
while (ancestor !== null) {
results.push(ancestor.name || 'Object.prototype');
ancestor = Object.getPrototypeOf(ancestor);
}
return results;
}
// name property added to make objects easier to identify
const foo = {name: 'foo'};
const bar = Object.create(foo);
bar.name = 'bar';
const baz = Object.create(bar);
baz.name = 'baz';
const qux = Object.create(baz);
qux.name = 'qux';
qux.ancestors(); // returns ['baz', 'bar', 'foo', 'Object.prototype']
baz.ancestors(); // returns ['bar', 'foo', 'Object.prototype']
bar.ancestors(); // returns ['foo', 'Object.prototype']
foo.ancestors(); // returns ['Object.prototype']