delete List.prototype.fooBar
})
+ it('keeps Array prototype names prefixed with $', () => {
+ // We're picking a function that we know isn't part of core svg.js
+ // If we implement an 'unshift' function at some point, change this to something else
+ if (List.prototype.hasOwnProperty('unshift')) {
+ fail('List.unshift is already a function - change this test to use a different name!');
+ return;
+ }
+
+ List.extend([ 'unshift' ])
+ expect(new List().unshift).toEqual(any(Function))
+ expect(new List().$unshift).toEqual(Array.prototype.unshift)
+ delete List.prototype.unshift;
+ });
+
it('skips reserved names', () => {
const { constructor, each, toArray } = List.prototype
List.extend([ 'constructor', 'each', 'toArray' ])
// Don't add private methods
if (name[0] === '_') return obj
+ // Allow access to original Array methods through a prefix
+ if (name in Array.prototype) {
+ obj['$' + name] = Array.prototype[name]
+ }
+
// Relay every call to each()
obj[name] = function (...attrs) {
return this.each(name, ...attrs)