2014-09-03 85 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

相關問題