从一个对象到另一个JavaScript的参考原型方法(KineticJS)

时间:2014-09-03 19:41:50

标签: javascript methods prototype kineticjs

我尝试在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();

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

1 个答案:

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

不像简单地为超级原型添加方法那么干净,但我确信他们有理由以这种方式做事。