1/**
2 * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#Polyfill
3 */
4if (!Array.prototype.fill) {
5    Object.defineProperty(Array.prototype, 'fill', {
6        value: function(value) {
7
8            // Steps 1-2.
9            if (this == null) {
10                throw new TypeError('this is null or not defined');
11            }
12
13            var O = Object(this);
14
15            // Steps 3-5.
16            var len = O.length >>> 0;
17
18            // Steps 6-7.
19            var start = arguments[1];
20            var relativeStart = start >> 0;
21
22            // Step 8.
23            var k = relativeStart < 0 ?
24                Math.max(len + relativeStart, 0) :
25                Math.min(relativeStart, len);
26
27            // Steps 9-10.
28            var end = arguments[2];
29            var relativeEnd = end === undefined ?
30                len : end >> 0;
31
32            // Step 11.
33            var final = relativeEnd < 0 ?
34                Math.max(len + relativeEnd, 0) :
35                Math.min(relativeEnd, len);
36
37            // Step 12.
38            while (k < final) {
39                O[k] = value;
40                k++;
41            }
42
43            // Step 13.
44            return O;
45        }
46    });
47}
48