Sono sicuro che questo è stato definitivamente risposto prima, e ho provato a cercarlo .. forse i miei termini di ricerca sono sbagliate ...metodi arbitrari degli oggetti e le proprietà in JavaScript
Fondamentalmente ho un oggetto myObject
e ho un insieme di proprietà e metodi definiti per questo. Quello che voglio fare è essere in grado di gestire chiamate/riferimenti a proprietà e metodi che non ho definito.
Per esempio, diciamo che ho questo:
var myObject = {
someProperty : 'foobar',
someFunction : function() { /* Do stuff */ }
}
Attualmente, se qualcuno cerca di effettuare una chiamata a myObject.someOtherFunction()
, JavaScript urla e grida su di esso. Quello che voglio fare è impostare un modo per gestirlo automaticamente. Ad esempio, invece di JavaScript che genera un errore, il mio oggetto restituisce semplicemente false. È possibile?
Un altro modo di vedere le cose è questo:
var myObject = {
someFunction : function() { /* Do stuff */ }
magicBucket : function() { /* Do stuff */ }
}
Se chiamo myObject.someFunction()
, ben definita e fa qualcosa. Quello che voglio che succeda è che, per esempio, se chiami myObject.someOtherFunction()
, invece di JavaScript che genera un errore, chiamerebbe myObject.magicBucket()
.
Il motivo è che ho un client che utilizza una libreria di terze parti sul proprio sito. Vogliono smettere di usarlo, ma rimuoverlo completamente richiederà molto tempo e molti sforzi. Quindi, come soluzione a breve termine, volevano sapere se potevo creare un file fittizio che sostanzialmente non fa nulla. Bene, questa libreria utilizza diversi oggetti che hanno molti metodi. Potrei passare attraverso tutto e creare oggetti fittizi, ma ho pensato che forse ci potrebbe essere un semplice metodo "catch-all" per farlo.
Alcuni hanno menzionato controllando se il metodo esiste prima, avvolgendolo in una condizione o try..catch, ecc. Bene, il punto di questo è che in questo momento non riesco a toccare le chiamate effettive ai metodi. E poiché l'obiettivo generale è quello di rimuovere definitivamente la codifica, non è nemmeno applicabile.
Questo è abbastanza irregolare, posso chiedere perché si desidera che questa funzionalità? – azz
Se pensate che 'someOtherFunction' sia' indefinito' o una funzione, potreste fare 'myObject.someOtherFunction? MyObject.someOtherFunction(): false', quindi invocate' myObject.someOtherFunction' se non è un "falsy" "valore (' false' 'undefined',' null', '0'), o yield' false' come valore di fallback. – apsillers
http://stackoverflow.com/questions/2527474/is-there-a---to-handle-undefined-functions-being-called-in-javascript –