如何检查一个类是否是另一个类的继承者?

时间:2014-05-21 08:49:35

标签: javascript kineticjs

我有一个代码:

var circle = new Kinetic.Circle();
console.log(circle instanceof Kinetic.Node); // false

但结果是false;

如何检查班级Kinetic.Circle是否继承了班级Kinetic.Node

1 个答案:

答案 0 :(得分:0)

Kinetic不使用真正的原型继承,它使用extend - 方法传递原型函数但没有原型对象。这就是instanceof返回false的原因。 您可以使用以下方法测试Kinetic.Shape

var circle = new Kinetic.Circle();
console.log( circle.nodeType === "Shape" ); //returns true

jsbin

编辑:如果你真的需要测试Kinetic.Node,我会使用类似object.hasOwnProperty("nodeType");

的内容

Edit2:如果你想继承Kinetic.Circle中的类,我将使用原型继承,这将授予你通过instanceof访问的权限:

var Circle = function( c ) { Kinetic.Circle.call( this, c ); };
Circle.prototype = Object.create( Kinetic.Circle );
var inst = new Circle( );
console.log( inst instanceof Circle ); // true
console.log( inst instanceof Kinetic.Circle ); //true
// use Circle or create subclasses of Circle

如果您真的想使用Kinetic.Util.extend,请使用与nodeType类似的内容:

var Circle = function( c ) { Kinetic.Circle.call( this, c ); this.myType = "MyCircle" };
Kinetic.Util.extend( Circle, Kinetic.Circle );

var inst = new Circle( );
console.log( inst.myType === "MyCircle" ); //true