// Array.of calls a "length" setter if one is present. var hits = 0; var lastObj = null, lastVal = undefined; function setter(v) { hits++; lastObj = this; lastVal = v; } // when the setter is on the new object function Pack() { Object.defineProperty(this, "length", {set: setter}); } Pack.of = Array.of; var pack = Pack.of("wolves", "cards", "cigarettes", "lies"); assertEq(lastObj, pack); assertEq(lastVal, 4); // when the setter is on the new object's prototype function Bevy() {} Object.defineProperty(Bevy.prototype, "length", {set: setter}); Bevy.of = Array.of; var bevy = Bevy.of("quail"); assertEq(lastObj, bevy); assertEq(lastVal, 1);