Какой класс / тип не определен, и возможно ли расширить / добавить метод к нему?

0

У меня есть hash 'h' и есть код вроде:

h[key].dostuff()

Когда ключ не существует в хеше, h [ключ] не определен, и я получаю сообщение об ошибке, что я не могу вызывать метод "dostuff" undefined.

Есть ли способ добавить этот метод к undefined, если undefined является расширяемым классом?

Я уверен, что это должно быть обычным делом, поэтому есть ли предпочтительный способ обработки этого, не прибегая к обходной функции, например hh (key), в которой я мог бы манипулировать неопределенными результатами?

Благодарю.

Теги:
class
undefined
extend

3 ответа

2

Поскольку undefined приравнивается к false в javascript, вы можете комбинировать проверку значения и вызов функции, например:

h[key] && h[key].dostuff();

Это гарантирует, что если h[key] имеет значение, dostuff().

  • 0
    Я понимаю, почему это была бы лучшая альтернатива, чем использование «нормального» оператора if , но я предпочитаю удобочитаемость и согласен с этим. Я очень обеспокоен, когда вижу, как логическая ценность исчезает в пропасти переводчика.
  • 0
    I'm quite disturbed to see a logical value disappear like this in the abyss of the interpreter. Ха! Добро пожаловать в типы данных в Javascript: D На самом деле личное предпочтение зависит от того, используете ли вы этот метод или стандартное условие if . Я предпочитаю этот для краткости.
Показать ещё 1 комментарий
1
if( h[key])
    h[key].dostuff()

это проверка "если значение существует, doStuff()"

0

Вы всегда можете сделать что-то вроде этого:

h.get = function(key) {
    if(this.hasOwnProperty(key))
        return this[key];

    //here return a default object, whatever that would be
    return {doStuff: function() {
        //default doStuff function
    }};
};

h.get(key).doStuff();

Я знаю, это небольшое принудительное решение, но оно может каким-то образом имитировать поведение по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню