我尝试在KineticJS中创建方法。我添加了这段代码:
Kinetic.Circle.prototype.test = function(){
alert(1);
}
并且它正在工作,但我想要添加此方法不仅适用于Circle而是适用于图层等。所以我尝试使用此代码
Kinetic.Node.prototype.test = function(){
alert(1);
}
我的控制台出错: Uncaught TypeError:对象#没有方法'test'。
我试图在Google搜索某些解决方案,但我找不到它。
@EDITED 对于Bergi :) 我有图层的数组,在图层[layer_name] .object我正在创建Kinetic.Layer对象,如下面的代码:
layers.names[name]={
id:variable,
object:new Kinetic.Layer()
};
stage.add(layers.names[name].object);
是的,之前在此代码中创建了舞台:
var stage=new Kinetic.Stage({
container:'canvas',
draggable:true,
height:document.documentElement.clientHeight,
width:document.documentElement.clientWidth
});
之后我在数组中添加指向我的对象:
var point=new Kinetic.Circle({
fill:'#000',
radius:3,
x:parent.children('input[name="x"]').val(),
y:parent.children('input[name="y"]').val()
});
var layer_name=$('input[name="layer"]').val();
layers.names[layer_name].object.add(point).draw();
此刻我正在试着运行我的方法:
var layer_name=$('input[name="layer"]').val();
var point=layers.names[layer_name].object.children[$('input[name="element_index"]').val()];
point.test();
但是在控制台中我只有我之前粘贴的错误。
答案 0 :(得分:2)
看起来Kinetic不像你期望的那样处理继承。 Kinetic.Node
实际上并不在Kinetic.Circle
的原型链中。
创建Kinetic.Circle
时,会有一个实用程序功能,可以将所有功能从Kinetic.Node.prototype
复制到Kinetic.Circle.prototype
。
我不是Kinetic用户,但我认为这样的事情可能有用。
var myMethods = {
test: function() {
alert(1);
}
}
Kinetic.Util.addMethods(Kinetic.Circle, myMethods);
Kinetic.Util.addMethods(Kinetic.Shape, myMethods);
Kinetic.Util.addMethods(Kinetic.Node, myMethods);
Kinetic.Util.addMethods(Kinetic.Layer, myMethods);
不像简单地为超级原型添加方法那么干净,但我确信他们有理由以这种方式做事。