2014-09-03 38 views
0

我尝试在KineticJS中创建方法。我添加了这个代码:从一个对象引用原型方法到另一个JavaScript(KineticJS)

Kinetic.Circle.prototype.test = function(){ 
    alert(1); 
} 

它的工作,但我想添加此方法不仅适用于圆,但层和更多。所以我尝试使用此代码

Kinetic.Node.prototype.test = function(){ 
    alert(1); 
} 

,我有错误在我的控制台:遗漏的类型错误:对象#有没有方法“测试”

我试图在谷歌搜索一些解决方案,但我找不到它。

@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(); 

但在控制台我只有我之前粘贴错误。

+1

还请包括你如何尝试调用它。 – Bergi 2014-09-03 19:55:39

+0

@Bergi - 我为你编辑过文章,希望它能帮助你尝试帮助我。最好的祝福。 – user242302 2014-09-03 20:06:05

回答

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); 

几乎没有简单地向超级原型添加方法那么干净,但我确信他们有这样做的理由。

+0

好的,你的代码工作正常:)非常感谢你;) – user242302 2014-09-03 20:31:03

相关问题