1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/songjinyang-everyday

 / Детали:

Задача 15. Понимание использования Proxy и решение задачи a == 0 && a == 1 && a == 2, результат true. Для решения задачи...

Предстоит сделать
Владелец
Создано  
27.04.2025

можно использовать объект Proxy, который позволяет перехватывать и переопределять операции, выполняемые над объектом. Пример решения: javascript const handler = { get: function(target, prop) { return target[prop]; }, has: function(target, prop) { return prop in target; } }; const target = {0: true, 1: true, 2: true}; const a = new Proxy(target, handler); console.log(a == 0 && a == 1 && a == 2); // true В данном примере мы создаем объект target с ключами 0, 1 и 2, каждый из которых имеет значение true. Затем мы создаем объект Proxy, который перехватывает операции get и has. Это позволяет нам проверять наличие ключей в объекте и возвращать соответствующие значения. Таким образом, выражение a == 0 && a == 1 && a == 2 возвращает true, так как все три условия выполняются благодаря использованию объекта Proxy.

     let a = new Proxy({}, {
        i: 0,
        get(target, key, value) {
            return () => this.i++
        }
    })
                           // Здесь появляется один раз
    console.log(a === 0 && a === 1 && a === 2)       // true, так как a появляется один раз и сразу вызывает событие


    // 
    let cc = {name: 'ss', age: 11, sex: 'муж'}
    let c = new Proxy(cc, {
        i: 1,
        get(target, key) {
            console.log(target)
            console.log(key)
            return () => this.i                   // this указывает на текущий объект, target указывает на cc, то есть на первый параметр
            // return 'ss'                 // выход функции, возвращаемое значение присваивается c
        },
        set(target, key, value) {
            if (key === "sex") {
                throw 'неизменяемо'
            } else {
                target['age'] = value
                target[key] = value                   // благодаря этому добавляется свойство d
            }
        }
    })
    c.d = 12
    // c.sex = 'жен'
    console.log(c === 1)
    console.log(cc)

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/songjinyang-everyday.git
git@api.gitlife.ru:oschina-mirror/songjinyang-everyday.git
oschina-mirror
songjinyang-everyday
songjinyang-everyday