我有一个代码:
var circle = new Kinetic.Circle();
console.log(circle instanceof Kinetic.Node); // false
但结果是false
;
如何检查班级Kinetic.Circle
是否继承了班级Kinetic.Node
?
答案 0 :(得分:0)
Kinetic不使用真正的原型继承,它使用extend
- 方法传递原型函数但没有原型对象。这就是instanceof
返回false
的原因。
您可以使用以下方法测试Kinetic.Shape
:
var circle = new Kinetic.Circle();
console.log( circle.nodeType === "Shape" ); //returns true
编辑:如果你真的需要测试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