2013-02-25 35 views

回答

1

原型是在定义对象时声明的。在实例化时,它与KineticJS,afaik中的原型没有任何关系。

要重新定义对象的原型,可以再次运行以下内容以添加Kinetic.Node的其他原型。

Kinetic.Global.extend(Kinetic.Container, Kinetic.Node); 
Kinetic.Global.extend(Kinetic.Shape, Kinetic.Node); 
Kinetic.Global.extend(Kinetic.Group, Kinetic.Container); 
Kinetic.Global.extend(Kinetic.Layer, Kinetic.Container); 
Kinetic.Global.extend(Kinetic.Stage, Kinetic.Container); 
Kinetic.Global.extend(Kinetic.Circle, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Ellipse, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Image, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Line, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Path, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Polygon, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Rect, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.RegularPolygon, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Sprite, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Star, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Text, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.TextPath, Kinetic.Shape); 
Kinetic.Global.extend(Kinetic.Wedge, Kinetic.Shape); 
1

问题是,所有的方法都创造动力学对象的过程中被复制,然后连接似乎忘记了:

// v4.3.1, l. 54 
Kinetic.Global.extend(Kinetic.SceneCanvas, Kinetic.Canvas); 

// v4.3.1, l. 785 
extend: function(c1, c2) { 
    for(var key in c2.prototype) { 
     if(!(key in c1.prototype)) { 
      c1.prototype[key] = c2.prototype[key]; 
     } 
    } 
}, 

一种可能性是使用KineticJS自身的扩展机制额外的原型条目复制到构造函数的功能在动力学哈希中:

var KineticMixin = function() {}; 
KineticMixin.prototype = { 
    doSomething : function() { console.log("yo-ho-ho"); } 
}; 

for(var key in Kinetic) { 
    if(Kinetic.Type._isFunction(Kinetic[key])) { 
     Kinetic.Global.extend(Kinetic[key], KineticMixin); 
    } 
} 

var d = new Kinetic.Image({}); 
d.doSomething(); 

如果扩展ctor函数已经有一个名称的条目,它将被忽略。因此,复制和修改extend函数来解决这个问题可能是一个好主意。而只是运行在Kinetic对象中的所有键似乎不是要做的事情。也许显然有更好的办法。

相关问题