diff --git a/lib/class.js b/lib/class.js index 0b638c7..209b46a 100644 --- a/lib/class.js +++ b/lib/class.js @@ -106,6 +106,16 @@ exports.isInstanceOf = function( type, instance ) }; +/** + * Alias for isInstanceOf() + * + * May read better in certain situations (e.g. Cat.isA( Mammal )) and more + * accurately conveys the act of inheritance, implementing interfaces and + * traits, etc. + */ +exports.isA = exports.isInstanceOf; + + /** * Default class implementation * @@ -399,9 +409,12 @@ function attachExtend( func ) */ function attachInstanceOf( instance ) { - util.defineSecureProp( instance, 'isInstanceOf', function( type ) + var method = function( type ) { return exports.isInstanceOf( type, instance ); - }); + }; + + util.defineSecureProp( instance, 'isInstanceOf', method ); + util.defineSecureProp( instance, 'isA', method ); } diff --git a/test/test-class.js b/test/test-class.js index c3829e9..bffd6da 100644 --- a/test/test-class.js +++ b/test/test-class.js @@ -112,6 +112,12 @@ assert.ok( "Class is not an instance of its instance" ); +assert.equal( + Class.isInstanceOf, + Class.isA, + "isA() is an alias for isInstanceOf()" +); + assert.ok( ( ( inst.isInstanceOf instanceof Function ) && ( inst.isInstanceOf( Foo ) === true ) @@ -120,3 +126,9 @@ assert.ok( "Class instance contains partially applied isInstanceOf method" ); +assert.equal( + inst.isInstanceOf, + inst.isA, + "Class instance contains isA() alias for isInstanceOf() partially applied function" +); +