var createCustomTestGetterSetter = $vm.createCustomTestGetterSetter; function assert(b, m) { if (!b) throw new Error("Bad:" + m); } class Class { }; let items = [ new Class, new Class, new Class, new Class, ]; let customGetterSetter = createCustomTestGetterSetter(); items.forEach((x) => { x.__proto__ = customGetterSetter; assert(x.__proto__ === customGetterSetter); }); function validate(x, valueResult, accessorResult) { assert(x.customValue === valueResult); assert(x.customAccessor === accessorResult); let o = {}; x.customValue = o; assert(o.result === valueResult); o = {}; x.customAccessor = o; assert(o.result === accessorResult); assert(x.randomProp === 42 || x.randomProp === undefined); } noInline(validate); let start = Date.now(); for (let i = 0; i < 10000; ++i) { for (let i = 0; i < items.length; ++i) { validate(items[i], customGetterSetter, items[i]); } } customGetterSetter.randomProp = 42; for (let i = 0; i < 10000; ++i) { for (let i = 0; i < items.length; ++i) { validate(items[i], customGetterSetter, items[i]); } } items.forEach((x) => { Reflect.setPrototypeOf(x, { get customValue() { return 42; }, get customAccessor() { return 22; }, set customValue(x) { x.result = 42; }, set customAccessor(x) { x.result = 22; }, }); }); for (let i = 0; i < 10000; ++i) { for (let i = 0; i < items.length; ++i) { validate(items[i], 42, 22); } }