Сборка от 17 марта 2017 г



Download 9,9 Mb.
bet291/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   287   288   289   290   291   292   293   294   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

deleteProperty


Ловушка deleteProperty по синтаксису аналогична get/has .


Срабатывает при операции delete , должна вернуть true , если удаление было успешным.


В примере ниже delete не повлияет на исходный объект, так как все операции перехватываются и «аннигилируются» прокси:


'use strict';


let dictionary = { 'Hello': 'Привет'


};

let proxy = new Proxy(dictionary, { deleteProperty(target, phrase) {


return true; // ничего не делаем, но возвращает true
}
});
// не удалит свойство delete proxy['Hello'];


alert("Hello" in dictionary); // true

// будет то же самое, что и выше


// так как нет ловушки has, операция in сработает на исходном объекте alert("Hello" in proxy); // true


enumerate


Ловушка enumerate перехватывает операции for..in и for..of по объекту.


Как и до ранее, если ловушки нет, то эти операторы работают с исходным объектом:


'use strict';


let obj = {a: 1, b: 1};




let proxy = new Proxy(obj, {});
// перечисление прокси работает с исходным объектом for(let prop in proxy) {
alert(prop); // Выведет свойства obj: a, b
}

Если же ловушка enumerate есть, то она будет вызвана с единственным аргументом target и сможет вернуть итератор для свойств. В примере ниже прокси делает так, что итерация идёт по всем свойствам, кроме начинающихся с подчёркивания _ :


'use strict';


let user = { name: "Ilya",


surname: "Kantor",
_version: 1,
_secret: 123456
};

let proxy = new Proxy(user, { enumerate(target) {


let props = Object.keys(target).filter(function(prop) { return prop[0] != '_';
});

return props[Symbol.iterator]();


}
});
// отфильтрованы свойства, начинающиеся с _ for(let prop in proxy) {
alert(prop); // Выведет свойства user: name, surname
}

Посмотрим внимательнее, что происходит внутри enumerate :





  1. Сначала получаем список интересующих нас свойств в виде массива.

  2. Метод должен возвратить итератор по массиву. Встроенный итератор для массива получаем через вызов props[Symbol.iterator]() .



apply


Прокси умеет работать не только с обычными объектами, но и с функциями.


Если аргумент target прокси – функция, то становится доступна ловушка apply для её вызова. Метод apply(target, thisArgument, argumentsList) получает:



  • target – исходный объект.

  • thisArgument – контекст this вызова.

  • argumentsList – аргументы вызова в виде массива.

Она может обработать вызов сама и/или передать его функции.


'use strict';


function sum(a, b) { return a + b;


}


let proxy = new Proxy(sum, {
// передаст вызов в target, предварительно сообщив о нём apply: function(target, thisArg, argumentsList) {
alert(`Буду вычислять сумму: ${argumentsList}`); return target.apply(thisArg, argumentsList);
}
});

// Выведет сначала сообщение из прокси,


// а затем уже сумму alert( proxy(1, 2) );

Нечто подобное можно сделать через замыкания. Но прокси может гораздо больше. В том числе и перехватывать вызовы через new .





Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   287   288   289   290   291   292   293   294   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish