Come posso verificare se un oggetto JavaScript è un'implementazione di un'interfaccia utilizzando lo Google Closure inheritance mechanism?Verifica se l'oggetto è l'implementazione dell'interfaccia nel framework delle classi di Google Closure
non ho trovato alcun accenno di my.Animal
negli oggetti creati tramite new my.Dog()
e object instanceof my.Animal
non ha funzionato. Le uniche informazioni sull'interfaccia sono errori del compilatore quando si dimentica di implementare metodi nella classe figlio.
/**
* @interface
*/
my.Animal = function() {};
/**
* Does something.
* @return {string}
*/
my.Animal.prototype.doSomething;
/**
* @constructor
* @implements {my.Animal}
*/
my.Dog = function() {};
/** @inheritDoc */
my.Dog.prototype.doSomething() = function {
return "something";
}
var dog = new my.Dog();
console.log(dog instanceof my.Animal); // returns false
Un modo che ho trovato è approssimativamente di prova per la proprietà delle interfacce, anche se questo è male in tanti aspetti:
console.log(!!dog.doSomething); // returns true
Mi piacerebbe avere un commento su cosa è sbagliato PRIMA di ottenere downvoted. –