Ответ 1
Вы ищете __noSuchMethod__
:
JavaScript getter для всех свойств
Учитывая следующий пример 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()
?
Вы ищете __noSuchMethod__
:
JavaScript getter для всех свойств
Вы можете создать объект 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