2013-04-17 46 views
0

我定義了兩個原型,每個原型包含不同的功能。單個腳本文件中的兩個原型引發問題

var sfSvgRender = function (element) { 

    this.svgLink = "http://www.w3.org/2000/svg"; 
    this.svgObj = document.createElementNS(this.svgLink, "svg"); 
    this._rootId = $(element).attr("id"); 
    this.svgObj.setAttribute('id', this._rootId + '_svg'); 

}; 
sfSvgRender.prototype = new (function() { 
    this.drawPath = function (options, element) { 
     var path = document.createElementNS(this.svgLink, "path"); 
     $(path).attr(options); 
     $(path).appendTo(element); 

    }, 

})(); 


var sfAxisRender = function (axis) { 
    this.currentAxis = axis; 
}; 
sfAxisRender.prototye =new(function(){ 

    this.drawText=function (options, label, groupEle, svgObj) { 
     var text = document.createElementNS(this.svgLink, "text"); 
     $(text).attr(options); 
     $(text).html(label); 
     $(text).appendTo(groupEle); 
     $(groupEle).appendTo(svgObj); 

    } 

})(); 

當我創造了兩個實例對象的第一對象將正常工作(即我們可以能夠訪問第一臺樣機的方法)

,但不能能夠訪問第二架原型機的方法。

this.svgRenderer = new sfSvgRender(this.element); 

this.axisRender=new sfAxisRender(XAxis); 

this.svgRenderer正常工作。但axisRender無法正常工作。

+0

請勿[使用'new'來創建原型對象](http://stackoverflow.com/q/10406552/1048572)! – Bergi

+0

究竟「不能正常工作」?你有任何錯誤? – Bergi

+0

我無法從sfAxisRender原型訪問drawText的方法,但我可以訪問sfSVgRender原型/對象的所有方法。 – SivaRajini

回答

1

你有錯誤prototype作爲prototyesfAxisRender,這就是爲什麼它不會從你試圖分配的新原型實例的東西繼承。

function sfSvgRender(element) { 
    this.svgLink = "http://www.w3.org/2000/svg"; 
    this.svgObj = document.createElementNS(this.svgLink, "svg"); 
    this._rootId = $(element).attr("id"); 
    this.svgObj.setAttribute('id', this._rootId + '_svg'); 
} 
sfSvgRender.prototype.drawPath = function (options, element) { 
    var path = document.createElementNS(this.svgLink, "path"); 
    $(path).attr(options); 
    $(path).appendTo(element); 
}; 

function sfAxisRender(axis) { 
    this.currentAxis = axis; 
} 
sfAxisRender.prototype.drawText = function (options, label, groupEle, svgObj) { 
    var text = document.createElementNS(this.svgLink, "text"); 
    $(text).attr(options); 
    $(text).html(label); 
    $(text).appendTo(groupEle); 
    $(groupEle).appendTo(svgObj); 
};