With Classing{js}
and its ability to make a class implements multiple interfaces in addition to inheriting a class, the ordinary instanceof
operator of javascript became limited as it cannot check if a class is an instance of an interface that is implemented by it. To solve this issue, the library provides a custom method called instanceOf
that gets attached to every object you create and has the ability to check if this object is an instance of a class or an interface in any level in the ancstors tree.
It's extremly simple to use , just call yourObject.instanceOf(ancestor)
and it will return true if your object is an instance of that ancestor, or false otherwise.
Here's an exmaple that will make things even clearer:
var Identifiable = classing.Interface({ getIdentified: function(){} }); var IPayable = classing.Interface({ getPaid : function(){} }); var Person = classing.Class.Implements(Identifiable)({ private : { id : null, }, protected : { name : null, age : null, }, public : { Construct : Function.create(xTyped , [ types(), function() { this.id = Date.now(); }, types(String , Number), function(str , num) { this.name = str; this.age = num; this.id = Date.now(); } ]), getIdentified : function() { return this.id; } } }); var Employee = classing.Class.Extends(Person).Implements(IPayable)({ protected : { salary : 5000, balance : 0 }, public : { getPaid : function() { this.balance += this.salary; } } }); var emp1 = new Empolyee(); emp1.instanceOf(Empolyee); //true emp1.instanceOf(IPayable); //true emp1.instanceOf(Person); //true emp1.instanceOf(Identifiable); //true emp1.instanceOf(Object); //true emp1.instsnceOf(Array); //false