Есть ли такая вещь, как ключ для всех объектов javascript?

Учитывая следующий пример javascript:

var myobj = {   func1: function() { alert(name in this) },
                func2: function() { alert(name in this) },
                func3: function() { alert(name in this) }
}

myobj.func2(); // returns true
myobj.func4(); // undefined function

Можно ли создать ключ "catch-all" для myobj, который будет вызван, если не определено ключ/функция (как в func4()), сохраняя формат myobj.functionCall()?

Ответ 2

Вы можете создать объект JavaScript с ключами 'wildcard' или 'catch-all', используя Proxy и функцию getter. В отличие от предоставленных решений, прокси-сервер должен работать практически в любой среде, включая Node.js.

var foo = new Object()

var specialFoo = new Proxy(foo, {
    get(target,name) {
        // do something here
        return name
    }
})

console.log(specialFoo.blabla) // this will output "blabla"

Если вы хотите, чтобы свойства вызывались, просто верните функцию:

var specialFoo = new Proxy(foo, {
    get(target,name) {
        return function() {
            console.log('derp')
            return name
        }
    }
})


specialFoo.callMe() // this will print derp

Подробности: документация по Mozilla