
рдореИрдк, рд╡реАрдХреИрдк рдФрд░ рд╕реЗрдЯ рдЬреИрд╕реА рдЕрджреНрднреБрдд рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА рд╣рдм рдкрд░ рдлрд┐рд╕рд▓ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдПрдкреАрдЖрдИ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрджрд┐ рдореИрдВ рдлрд┐рд░ рднреА рдЦреЛрдЬ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред
рдЗрди APIs рдХреЛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ (рдХреНрд░реЛрдо рдХреИрдирд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣реАрдВ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рднреА, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрдм рддрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ HTMLElement рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛ред рдкреЙрд▓рд┐рдорд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рддреАрди рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
if (navigator.userAgent.indexOf('Firefox/') > -1)
рд╡реЗ рдЗрддрдиреЗ рдЕрдЪреНрдЫреЗ рдХреНрдпреЛрдВ рд╣реИрдВ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдорд╛рдирдЪрд┐рддреНрд░ / рдХрдордЬреЛрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдСрдмреНрдЬреЗрдХреНрдЯ, рдлрд╝рдВрдХреНрд╢рди, рдПрд░реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрддреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рджреГрд╢реНрдпрдкрдЯрд▓ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- рдбреЛрдо рддрддреНрд╡
- XHR рдЕрдиреБрд░реЛрдз
- рдлрд╝рд╛рдЗрд▓ рддрддреНрд╡
рдпрд╣ рд╣рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдИрдбреА-рддрддреНрд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ, рдХрдИ рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ рдбреЗрдЯрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рдкрд╛рдЧрд▓ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рд╣рдо WeakMap рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐, рд╣рдо WeakMap рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреА рддрд░рд╣:
рдорд╛рдирдЪрд┐рддреНрд░ рдПрдХ рд╣реИрд╢ рд╣реИ рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреА рдпрд╛ рддреЛ рдЖрджрд┐рдо рдпрд╛ рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕реЗрдЯ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдУ (рдПрди ^ 2) рд╕реЗ рдУ (рдПрди) рддрдХ рдпреВрдиреАрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреМрди рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдиреЛрдб рдХреЗ рд╕рд╛рде рдмреИрдХрдПрдВрдб рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ - рдореИрдВ рд╢рд╛рдпрдж рдЪреБрдк рд░рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрднреА рддрдХ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдкрдардиреАрдп рднреА рд╣реИ:
var map = new WeakMap; map.set(someObject, 'someKey'); alert(map.get(someObject)); map.delete(someObject);
рдХреЛрдиреЗрдЬреЗрдПрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╣рд┐рдд рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдореГрддрд┐-рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ред
Ecmascript.org рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдорд╛рди
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдХреБрдЫ рд╣рдж рддрдХ рдХрдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп,
рдЬреАрдердм рдкрд░ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ) рд╕реЗ рдЫрджреНрдо рд╕реНрдерд╛рдирд╛рдВрддрд░рдгред
window.WeakMap = function () { var keyList = []; var valueList = []; return Object.freeze({ 'get': function (key, defaultValue) { var index = keyList.indexOf(key); var value = valueList[index]; return index === -1 ? defaultValue : value; }, 'set': function (key, value) { var index = keyList.indexOf(key); if (index === -1) { keyList.push(key); valueList.push(value); } else { valueList[index] = value; } }
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрдореЛрд░реА рдзреНрдпрд╛рди рд╕реЗ рдмрд╣рддреА рд╣реИ: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдХреЛрдИ рддрддреНрд╡ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреА-рд▓рд┐рд╕реНрдЯ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╡реАрдХреЗрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдореГрддрд┐ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рднрдВрдбрд╛рд░рдг рдкрд░ рд▓реАрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред GarbageCollector рдПрдХ рддрддреНрд╡ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрднреА рднреА рдореМрдЬреВрдж рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрдВрдЬрди рд╕реНрддрд░ рдкрд░, рдпрд╣ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЧрд╛рд░рдмреЗрдЬрдХрд▓реЗрдХреНрдЯрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рджреВрд╕рд░реЗ, рдЬрдм рдХреАрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХрд╛ рдЪрдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдХрдмреБрдХ рдПрдпрд░ 2013 рдореЗрдВ рдХреНрд░реЛрдо рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓реЗрдиреЗ рд▓рдЧрддрд╛ рд╣реИред 1e9 рд╡реЗрдВ рддрддреНрд╡ рдХреА рдЦреЛрдЬ рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛ред рдХрд╛рд░реНрдп рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реЗ (n), рдЬреЛ рдХрднреА-рдХрднреА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред
рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдирдореВрдирд╛ рджрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдУ (1) рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ:
window.WeakMap = (function(){ var counter = Date.now() % 1e9; return function(){ var name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__'); return { set: function(key, value) { var entry = key[this.name]; if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {value: [key, value], writable: true}); }, get: function(key) { var entry; return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; } } } })();
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдореЗрдореЛрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реЗ рдмрджрддрд░ рднреА рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдЪрдХреНрд░реАрдп рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ: рдХреБрдВрдЬреА [рдирд╛рдо] [0] === рдХреБрдВрдЬреАред рдпрджрд┐ рдЖрдк рдЦреБрд▓реЗ рдкреНрд░рд▓реЗрдЦрди рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдКрдкрд░ рдЪрдврд╝ рдЬрд╛рдП - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧреЗрдЧрд╛ред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдкреЙрд▓рд┐рдорд░ / рдПрдХреНрд╕-рдЯреИрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реАрдХреЗрдк рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдереЛрдбрд╝рд╛ рдХрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MutationObserver рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд┐рд▓ рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдЗрд╕рдореЗрдВ рд╕реНрдореГрддрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдФрд░ minuses рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП рдирдЧрдгреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛: рд╣рдо рдЬрдореЗ рд╣реБрдП рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдХреБрдЫ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдмрд╣реБрдд рдЧрдВрднреАрд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди IE9 + рдмрди рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ рдХрд┐ рдпрд╣ IE6 + рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ Array.prototype.indexOf рдкреЙрд▓реАрдлрд╝рд┐рд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдореЛрдЬрд╝рд┐рд▓рд╛ рд╕реЗ ) рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред Array.prototype.indexOf IE9 рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Object.defineProperty (рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, IE8 рдореЗрдВ DOM рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝рд░реЗрдВрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдпрд╛ рддреЛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдореБрдЦреНрдп рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╢рд╛рдпрдж, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╛рд╣рд░ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╣реЛрддрд╛ рд╣реИ), рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рднрд░реА рд╣реБрдИ рд╕реНрдореГрддрд┐ред
JQuery рдореЗрдВ WeakMaps рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИред рдЬрдм рдЖрдк jQuery.data (рддрддреНрд╡, рдХреБрдВрдЬреА) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк WeakMap рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдЖрдкрдиреЗ рдХрднреА рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рджреЗрдЦрд╛ рд╣реЛ:
document.body.jQuery19104357186993584037 20
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ jQuery рдХреЗ рдЕрдкрдиреЗ WeakMap рдореЗрдВ рддрддреНрд╡ рдХреА рдЖрдИрдбреА рд╣реИред
рдЬрдм рдХреЛрдИ рддрддреНрд╡ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА:
- рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ;
- рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рд▓реАрдХ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ - рдЪрд╛рдмрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдореВрд▓реНрдп рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╣рдо рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред
рд╡реАрдХрдкрд╛рдЗрдк рдХреЛ рдЗрд╕ рддрд░рд╣ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рдХрдордЬреЛрд░ рд╕рдВрджрд░реНрдн рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ - рдПрдХ рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрд╢рди рдЬрд┐рд╕реЗ рдЬреАрд╕реА рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдп рджреЛрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред
рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рджреЛрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпрд╣ рднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рддрдм рддрдХ рд╕рдВрднрд╡ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдЬреАрдердм рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдЬреЛ рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛:
рдиреЙрди-рд▓реАрдХреА рдУ (1) рд▓реБрдХрдЕрдк рдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рд╡реАрдХрдПрдк рдХреЗ рд▓рд┐рдП рд╢рд┐рдо
рдпрд╣ Object.defineProperty рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ IE9 + рдФрд░ рдЬрдореА рд╣реБрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛, рд▓реЗрдХрд┐рди рддрддреНрд╡ рдореЗрдВ рдХреЛрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рдереА, рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рдереАред
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реА рдпрд╣рд╛рдБ рд╣реИ:
https://github.com/Benvie/WeakMap/рдореИрдВ рдЬрд╛рдБрдЪ рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрдореЛрд░реА рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдФрд░ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдкрд╣рд▓реЗ рдПрдХ рдЦрд╛рд▓реА рдкреГрд╖реНрда ( рдиреАрд▓рд╛ рддреАрд░ ) рдкрд░ рд╢реВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- рдкреЙрд▓реАрдлрд╝рд┐рд▓ ( рдкреАрд▓рд╛ рддреАрд░ ) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рджреВрд╕рд░рд╛ рддрд╛рд░рд╛рдВрдХрд┐рдд
- рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдореГрддрд┐ ( рд▓рд╛рд▓ рддреАрд░ ) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддреАрд╕рд░реЗ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- рддрддреНрд╡реЛрдВ рдХреЛ рд╢реЗрд╖ рд▓рд┐рдВрдХ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЪреМрдерд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ( рд╣рд░рд╛ рддреАрд░ )
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
рдХреНрд░реЛрдо 30 (рдореИрдХ 10.9)
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 24 (рдореИрдХ 10.9)
IE 11 (рд╡рд┐рди 8.1)
рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ - рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдЬреЛ рднреА рдореЗрдореЛрд░реА рд▓реА рдереА, рд╡рд╣ рд╕рднреА рд╣реИрд░рд╛рди рдереА - рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рджреЛрдиреЛрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЦреЛрдЬ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ O (1) рд╣реИред рдпрд╣ рд╕рдЪ рдирд┐рдХрд▓рд╛ред
рдХреНрд░реЛрдо 30 (рдореИрдХ 10.9)
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 24 (рдореИрдХ 10.9)
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╕рдм рд╕рдЪ рд╣реИред WeakMap рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрддрд╛ рд╣реИ, рдУрд╕реНрдкреНрд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╣рд░ рдкрд╛рдВрдЪрд╡реЗрдВ IE8 + рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдмрд╛рдХреА IE9 + рд╣реИред рдЙрд╕реА рд╕рдордп, WeakMap рди рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдмрд╛рдд рд╕рд╣реА рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЪреБрдирдирд╛ рд╣реИред
рд╡реИрд╕реЗ, рдЖрдк рдПрдХ рдбрдмрд▓ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреБрдЫ:
if (Object.defineProperty) { window.weakMap =
рдмреЗрд╢рдХ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдЗрддрдирд╛ рднреНрд░рд╛рдордХ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓реЗрдЦрдХ (
рдмреНрд░реИрдВрдбрди рдмреЗрдирд╡реА ) рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдмрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирд╕реЗ рдХреБрдЫ рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдерд╛, рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд╛рдпрдХ рдерд╛, рдлрд┐рд░ рднреА рдмреНрд░реИрдВрдбрди (рд▓реЗрдЦрдХ) рдиреЗ ES3 рдкрд░ ES6 рд╕рдВрдХрд▓рдХ рд▓рд┐рдЦрд╛, app.js (рдиреЛрдб рдкрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ) рдмрдирд╛рдпрд╛ рдФрд░ рдЬреЗрдПрд╕ рдореЗрдВ рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдЕрд╕реНрд╡реАрдХрд░рдг: рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдмреЗрд╣рддрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХреБрдЫ рдЪреЗрдХ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЗрдирдмрд┐рд▓реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдЬреЛ рдХреЛрдб рдореИрдВ рдпрд╣рд╛рдВ рдЙрджреНрдзреГрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЫрд╛рдпрд╛рд╡рд╛рдж рд╣реИ, рддрд╛рдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдРрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдЬреЛ рдХреЛрдб рдХреЛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рдХреЛ рднрдпрднреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд╕рдд рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ред
рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИрдВ
function toString() { [native code] }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╛рдБрдз рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рд╣реИ:
var prep = { __proto__: [] } instanceof Array ? function(f){ f.__proto__ = stringifier } : function(f){ define(f, stringifier) };
рдПрдХ __proto__ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрддреНрд╡ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧрд░ рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рд╣реИ:
var stringifier = function toString(){ return src[0] + nameOf(this) + src[1]; };
рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕реНрдЯрд░реНрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ - рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
a.__proto__ = { toString: function(){ return "function "+this.name+"() { [native code] }" } }
рд╡реИрд╕реЗ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рднреА рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг (рдЗрд╕рдХреЗ рдирд╛рдо рд╕рд╣рд┐рдд) рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдлрдВрдХреНрд╢рди .prototyp.name рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдмреНрд░реИрдВрдбрди рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
function nameOf(func){ return 'name' in func ? func.name : toSource.call(func).match(/^\n?function\s?(\w*)?_?\(/)[1]; }
рдпрд╣ рдбрд┐рдлрд╛рдЗрди (рд╕реНрдЯреНрд░рд┐рдкрд┐рдлрд╝рд╛рдпрд░, рд╕реНрдЯреНрд░рд┐рдлрд╝рд╛рдпрд░) рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рддрд╛рдХрд┐ рдХреЛрдб рд╣рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рдмрд┐рдпрд╛рдБ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрддрд╛ рд╣реИ:
function set(key, value){ unwrap(this).set(key, value); } function get(key){ return unwrap(this).get(key); }
рдФрд░ рдпрд╣рд╛рдБ рдордЬрд╝рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
var unwrap = function(weakMap){ return data.unlock(weakMap).value; }
рдбреЗрдЯрд╛ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ WeakMap рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХреЗрд╡рд▓ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬрдмрдХрд┐ рд╕рднреА рдХрдордЬреЛрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реНрд╡рдпрдВ рдПрдХ рдмрдбрд╝реА рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдХрдордЬреЛрд░ рдореИрдк рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЗрдЯрд╛-рд╡реАрдХрдкреЗрдЬрд╝ рд╣реИ (рдпрджрд┐ рдЖрдк рдПрдХ рдХреБрджрд╛рд▓ рдХреЛ рдХреБрджрд╛рд▓ рдХрд╣рддреЗ рд╣реИрдВ) рдЬреЛ рдЗрд╕рдореЗрдВ рд╕рднреА WeakMaps рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддред
рдкрд╣рд▓реА рдЪрд╛рд▓: рд╣рдо рдорд╛рди рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯ рд╕реЗ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рди рдкрдбрд╝реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо getOwnPropertyNames рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ
Object.defineProperty(Object, 'getOwnPropertyNames', { value: function getOwnPropertyNames(obj){ var props = getProps(obj); if (Object.prototype.hasOwnProperty.call(obj, globalID))
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреНрд░реЛрдорд┐рдпрдо рдбрд┐рдмрдЧрд░ рдХреЛ рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд░ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ:

рджреВрд╕рд░реА рдЪрд╛рд▓:
function storage(obj){ if (hasOwn.call(obj, globalID)) return obj[globalID];
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдХреБрдВрдЬреА рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреВрдареА рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИред
function Data(){ var puid = createUID(),
рдкрд╣рд▓реА рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдкрдВрдХреНрддрд┐ рд╣реИ:
Object.create(null, { value: { writable: true, value: undefined } });
рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдПрдХ рдбрдореА рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ propertiesObject рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдбрд┐рдлрд╛рдЗрдирдкреНрд░реЛрдкрд░реНрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЪреЗрдХ (рдбреЗрдЯрд╛ рдореЗрдВ "рдореВрд▓реНрдп") рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реА рдкрд╛рдЧрд▓ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд╛рдЗрди:
Object.defineProperty(store, puid, { value: (function(secret,data){ return function(key){ if(key===secret) return data } })(secret, data) });
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрдореА рдСрдмреНрдЬреЗрдХреНрдЯ, рдкреНрд░рддреНрдпреЗрдХ WeakMap рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреБрдВрдЬреА рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореВрд▓ рдХреЛрдб рдореЗрдВ рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рднреНрд░рд╛рдордХ рд╣реИ:
defProp(store, puid, { value: new Function('s', 'l', 'return function(k){if(k===s)return l}')(secret, data) });
рдмреНрд░реИрдВрдбрди рдиреЗ рдЗрд╕ рддрд░рд╣ рдЯрд┐рдкреНрдкрдгреА рдХреА:
рдмрд╕ рдкреНрд░рджрд░реНрд╢рдиред рд╢рд╛рдмреНрджрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рдЖрдк рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рднреА рджрд╛рдпрд░реЗ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред `рдлрдВрдХреНрд╢рди` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд╡рд╕реНрддреБ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рд╣реИред рд▓рдХреНрд╖реНрдп рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдерд╛ред рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрднрд╡рдд: рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕реЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦреА рдЬрд╛рдПрдЧреА, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рд╕рд╛рд╡ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ WeakMap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рд▓рдХреНрд╖реНрдп рд╣реИред
рд░реВрд╕реА рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЕрдиреБрд╡рд╛рдж рдореЗрдВ:
рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди () {} рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдХрд░, рдЖрдк рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдУрд╕реНрдкреНрд░реЗ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ - рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реЗ рд╡рд╣ рдкреВрд░реА рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдкрд▓рдмреНрдз рд╣реИред
рдирдпрд╛ рдлрдВрдХреНрд╢рди рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЧреНрд▓реЛрдмрд▓ рд╕реНрдХреЛрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓реАрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдерд╛, рдФрд░ рд╡рд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓реАрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдирддреАрдЬрддрди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреБрдЫ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
var map = new WeakMap; var a = {}; map.set(a, ['test']) console.log(a['2ql3g5ae6pcwstt9']['o6tnzx1xskf39pb9']) >function (k){if(k===s)return l}
рдЬрд╣рд╛рдБ ['2ql3g5ae6pcwstt9'] рдПрдХ рдХреАрд╕реНрдЯреЙрд░ рд╣реИ, рдЬреЛ рдПрдХ рдРрд╕реА рдбрдореА рд╡рд╕реНрддреБ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдХ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡реИрд╢рд┐рд╡рдХ рд╕реЗ рд▓реЗрдХрд░ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рддрдХ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдХрдордЬреЛрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ [2ql3g5ae6pcwstt9 '] [' o6tnzx1xskfxcb39s рдПрдХ рд╡рд╕реНрддреБ рдЬреЛ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреА рд╣реИ
{ value: '' }
рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВред рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдореВрд▓реНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╣рддрд╛ рд╣реИред
рд╕рднреА рдХреБрдВрдЬреА рд╕рднреА рд╕рдВрднрд╡ рдЗрдВрджреНрд░рд┐рдпреЛрдВ рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ Object.getOwnPropertyNames рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдЧреИрд░-рдореМрдЬреВрджрд╛ рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИрдВ рдЬреЛ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╡реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдореЗрдВ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИрдВ рдЕрдиреБрд░реЛрдзред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд (рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд┐рдирд╛ рдкрд╣реБрдВрдЪ рдЕрд╕рдВрднрд╡ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдИрдИ 9 + рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдЦреЛрд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд▓реАрдХрд┐рдВрдЧ рд╡реАрдХреЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рджреЗрддрд╛ рд╣реИред O (1) рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг Object.defineProperty рдХреЗ рд╕рд╛рде рдЧреБрдг рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп: рдЕрд╕рддреНрдп, рдЧрдгрдирд╛ рдпреЛрдЧреНрдп: рдЕрд╕рддреНрдп, рдЧрд▓рдд: рдЕрд╕рддреНрдп (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ) рдкрд╣реБрдВрдЪ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рдмреЗрд╢рдХ, рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рдЖрджрд░реНрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдмреНрд░реИрдВрдбрди рдиреЗ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдЕрднреА рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд╛рд░реНрдордиреА рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдХрдордЬреЛрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд░рд╡реИрдпрд╛ред
рдпреБрдкреАрдбреАред рдмреНрд░реИрдВрдбрди рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреНрдпреЛрдВ (0, eval) ('рдпрд╣') рдЕрдВрдд рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред (0, eval) ("рдпрд╣") рд▓рдЧрднрдЧ var e = eval рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ; рдИ ("рдпрд╣")ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ eval рд╣рдореЗрд╢рд╛ рд╕реНрдерд╛рдиреАрдп рд╕рд░рдгреА рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд░ рдХреЗ рд▓рд┐рдП eval рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред