Я знаю, что мой титул может быть не совсем ясным, я постараюсь изо всех сил объяснить, чего я пытаюсь достичь.Javascript, прототип объекта - избегайте писать полный путь
Я знаю, что модификация прототипов, как правило, неодобрительно, и по уважительной причине я пытаюсь выяснить способ сделать это, не добавляя в прототип не более одного элемента.
Я знаю, что я мог бы просто сделать что-то вдоль линий
Object.prototype.collection = {};
Object.prototype.collection.method1 = function(){ . . . };
Object.prototype.collection.method2 = function(){ . . . };
Object.prototype.collection.method3 = function(){ . . . };
etc.
А потом, когда я хотел использовать один из методов, я мог бы назвать
objectInstance.collection.method1();
Проблема с этим состоит в том, что в конечном итоге он может стать довольно многословным и утомительным, не говоря уже о том, что вы вызываете сто методов из этой коллекции, слово «коллекция» сто раз лишнее и пустая трата байтов.
Таким образом, я надеялся на методику создания методов таким образом, без необходимости писать полный путь каждый раз. то есть я мог бы написать
objectInstance.method1();
И это будет знать, где искать.
Мой процесс мышления на этом этапе состоит в том, что, очевидно, вызов последнего вызовет ошибку method does not exist
. Но мне любопытно, есть ли способ перехватить эту ошибку?
Например, в PHP существует функция spl_autoload_register(), которая вызывается всякий раз, когда класс не определен, что позволяет делать все, что необходимо для его загрузки/определения. Существует ли эквивалентная стратегия для этого обстоятельства?
Может быть, я мог бы добавить дополнительный метод «резервный», например, так:
Object.prototype.fallback = function(undefinedMethod){
if(this.collection.undefinedMethod){
this.collection.undefinedMethod();
}
};
И просто это называется каждый раз, когда метод является неопределенным, переходящим в методе.
Любая помощь для чего-либо в этом направлении, или если это возможно, будет очень признательна.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy –
Я иду посмотреть на это немного больше, но это похоже на то, что мне нужно! Спасибо! –
Просто убедитесь, что ваш хост поддерживает это, и он должен делать то, что вам нужно. Дайте мне знать, если это вам подходит, я мог бы опубликовать это как ответ. –