@ElfinDarkglow

Можно ли в JavaScript использовать getter с аргументами (наподобие indexer в С#)?

Подскажите пожалуйста есть ли в JavaScript что-то подобное и как это правильно оформить?
var e = Task.prototype;
Object.defineProperty(e, 'attendee', {
      get: function( name ){
        var result = true;  // тут всяческие вычисления основанные на name
        return result;
      },
      set: function( name, value ){
        this[name] = value; // присвоение тоже основано на name
      }
});

Имею ввиду чтобы использовать примерно так:
var isAttendee = Task.attendee(123);
Task.attendee(123) = true;
  • Вопрос задан
  • 2326 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
в ES6 появится объект Proxy, при помощи которого это можно сделать не зная названий явно. В ES5 же, если рассматривать на вашем примере, можно реализовать так:

function getter (name) {
    // ...

    return function (value) {
        // do something with params
    }
}

function setter (name, value) {
   // ...
}

['attendee'].forEach(function (name) {
    
    Object.defineProperty(e, name, {
        get: bindName(getter),
        set: bindName(setter)
    });

    function bindName (fn) {
        
        return function () {
            var args = Array.prototype.slice.call(arguments);
            args.unshift(name);
      
            return fn.apply(this, args);
        }
    }
});
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
По сути, вам надо вызвать метод, имея его имя в рантайме в какой-то переменной?
var obj = {
	attendee: function () {}
};

var name = 'attendee';
obj[name]();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы