Как Object.defineProperty getters и setter для всех неизвестных потомков в объекте

Вы можете прочитать этот блог для запуска сценария оболочки из MySQL: https://patternbuffer.wordpress.com/2012/09/14/triggering-shell-script-from-mysql/

Я думаю, что для вашего требования просто напишите скрипт python / php / perl, который соединит ваш MySQL DB и запросит таблицу предупреждений о любом предупреждении и, соответственно, отобразит предупреждающее сообщение на экране или отправит предупреждение электронной почты / смс.

1
задан adiga 3 March 2019 в 10:02
поделиться

4 ответа

Вы можете создать функцию, которая принимает другую функцию в качестве параметра. И выполнить функцию в пределах try...catch и вернуть значение, если оно существует, или вернуть значение по умолчанию в случае ошибки:

const DEFAULT_VAL = 37;

// get a function and an optional default value to override
function getAnyDepth(func, def) {
    try {
        return func();
    } catch (e) {
        return typeof def !== "undefined" ? def : DEFAULT_VAL;
    }
}

var obj = { a: 45 }

console.log(getAnyDepth(() => obj.a))
console.log(getAnyDepth(() => obj.a.b.c.d.e))
console.log(getAnyDepth(() => obj.c.d.e, { b: 100 }))
[116 ]

Ссылка: Как избежать «Невозможно прочитать свойство« имя »из неопределенного» в JavaScript

0
ответ дан adiga 3 March 2019 в 10:02
поделиться

Если вы хотите получить значение по умолчанию каждый раз, когда получаете доступ к неопределенному ключу в вашем объекте, вы делаете:

_.defaults(obj, {value: 37"})

или можете использовать стандартное сравнение:

if(typeof obj.a =='undefined'){
  return 37
}
0
ответ дан P.B.UDAY 3 March 2019 в 10:02
поделиться

Если obj.a равен 37, то obj.a.b будет иметь значение 37.b, которое не определено. Однако, если вы будете в порядке, если 37 станет результатом превращения чего-либо в примитив (например, путем конкатенации строк), тогда вы можете создать прокси.

Демо:

// Preparation
function setDefaultProperty(obj, defProp) {
    return new Proxy(obj, {
        get(target, prop) {
            if (prop in target || typeof prop === "symbol") return target[prop];
            return target[defProp];
        }
    });
}

var sink = setDefaultProperty({}, "_default");
sink._default = sink;
sink.valueOf = () => 37;

// Demo

var obj = {};

obj = setDefaultProperty(obj, "_default");
obj._default = sink;

console.log("" + obj.a.b.c.e); // 37
console.log("" + obj.what.ever); // 37

0
ответ дан trincot 3 March 2019 в 10:02
поделиться

Невозможно вернуть число , подобное , потому что каждое вложенное свойство должно возвращать объект, если вы хотите иметь возможность неограниченно долго получать доступ к вложенным ключам - лучшее, что вы можете do возвращает объект, который может быть приведен к желаемой строке, возможно, с помощью прокси:

const handler = {
  get(_, prop) {
    return prop === Symbol['toPrimitive']
    ? () => '37'
    : objProx;
  }
}
const objProx = new Proxy({}, handler);

console.log('' + objProx.a); // => '37'
console.log('' + objProx.a.b); // => '37'
console.log('' + objProx.a.b.c.d.e.foobarbaz); // => '37'

0
ответ дан CertainPerformance 3 March 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: