Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将原型方法从一个对象引用到另一个JavaScript(KineticJS)_Javascript_Methods_Prototype_Kineticjs - Fatal编程技术网

将原型方法从一个对象引用到另一个JavaScript(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

我尝试在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.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-我为你编辑了这篇文章,我希望它能帮助你尝试帮助我。致以最良好的问候。好的,您的代码运行良好:)非常感谢;)