2014-02-13 27 views
0

我想擴展圓,矩形,線等的屬性我能夠使用原型爲每個單獨的形狀做到這一點,但寧願將屬性添加到父並允許這些基本形狀從父類「嵌入」它們。矩形,圓圈等的父類是什麼

Kinetic.Shape.prototype.testMe=99; 

我怎麼會從說一個 「矩形」

+0

'rect.testMe'?看起來很簡單。 – user2357112

回答

0

父類的圈子,Rects等引用此屬性是Kinetic.Shape

父類Kinetic.Shape的是Kinetic.Node

正式地,您可以使用Kinetic.Util.extend將屬性/方法添加到Kinetic基類。

但這種擴展方法的「幕後」只是將基類屬性/方法附加到新類的.prototype。

因此,您的Kinetic.Shape.prototype.testMe與擴展類的「​​官方」方式非常相像。

KineticJS沒有實現繼承,因此您不能將屬性添加到Kinetic.Shape基類並讓其子代繼承這些屬性。

您可以在一定程度自動化的新特性的Kinetic.Shape及其所有衍生形狀使用這樣的代碼加入:

var Shapes={ 

    shapes:[ 
     Kinetic.Arc,Kinetic.Circle,Kinetic.Ellipse, 
     Kinetic.Image,Kinetic.Line,Kinetic.Rect,Kinetic.Ring, 
     Kinetic.Sprite,Kinetic.Text,Kinetic.Wedge,Kinetic.Shape 
    ], 

    add:function(key,value){ 
     for(var i=0;i<this.shapes.length;i++){ 
      this.shapes[i].prototype[key]=value; 
     } 
    } 

} 

// add some test properties to all the Kinetic.Shape's 

Shapes.add("testMe",99); 
Shapes.add("meToo",101); 
+0

但「Kinetic.Circle instanceof Kinetic.Shape」評估爲false – bigt95nt0110

+0

是的,'instanceof'將是false,因爲Kinetic不會給孩子父母的原型。相反,它通過將所有父級的原型屬性/方法添加到孩子的原型來「擴展」。像這樣:for(var key in parent.prototype){if(!(key in child.prototype)){child.prototype [key] = parent.prototype [key];}} ' – markE

+0

而不是擴展每個圓,矩形,線等屬性我想擴展它們的父類「Shape」並引用這些子類的屬性。你會如何從兒童課堂中引用這些內容? – bigt95nt0110