将原型方法从一个对象引用到另一个JavaScript(KineticJS)
我尝试在KineticJS中创建方法。我添加了以下代码:将原型方法从一个对象引用到另一个JavaScript(KineticJS),javascript,methods,prototype,kineticjs,Javascript,Methods,Prototype,Kineticjs,我尝试在KineticJS中创建方法。我添加了以下代码: Kinetic.Circle.prototype.test = function(){ alert(1); } var stage=new Kinetic.Stage({ container:'canvas', draggable:true, height:document.documentElement.clientHeight, width:document.documentElement.clientWidth
Kinetic.Circle.prototype.test = function(){
alert(1);
}
var stage=new Kinetic.Stage({
container:'canvas',
draggable:true,
height:document.documentElement.clientHeight,
width:document.documentElement.clientWidth
});
这是可行的,但我尝试添加这种方法,不仅用于圆,而且用于层和更多。所以我试着用这个代码
Kinetic.Node.prototype.test = function(){
alert(1);
}
我的控制台中有一个错误:uncaughttypeerror:Object#没有方法“test”
我试图在谷歌上搜索一些解决方案,但我找不到
@编辑
对于Bergi:)
我有一个带有层的数组,其中位于层[layer_name]中。我正在创建的对象。层对象类似于下面的代码:
layers.names[name]={
id:variable,
object:new Kinetic.Layer()
};
stage.add(layers.names[name].object);
是,在此代码中,在之前创建了阶段:
Kinetic.Circle.prototype.test = function(){
alert(1);
}
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();
但在控制台中,我只有一个以前粘贴过的错误。看起来Kinetic并没有像您期望的那样处理继承
Kinetic.Node
实际上不在Kinetic.Circle
的原型链中
创建Kinetic.Circle
时,有一个实用程序函数,它只需将所有函数从Kinetic.Node.prototype
复制到Kinetic.Circle.prototype
我不是一个动态用户,但我认为类似的东西可能会起作用
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);
这远不如简单地在super的原型中添加一个方法那么简单,但我相信他们这样做是有原因的。请也包括你如何称呼它。@Bergi-我为你编辑了这篇文章,我希望它能帮助你尝试帮助我。致以最良好的问候。好的,您的代码运行良好:)非常感谢;)