<html>
<body>
var el = document.getElementById("tab");
var tab = Table(el, data);
tab.showData();
tab.takeData();
var PieChart=drawPieChart(canvas);
</body>
</html>
<script>
function Table(el, data) {
...
...
return{
showData: function(){
...
...
}
takeData: function(){
var myData=new Array();
for (var i = 0; i < val2; i++) {
myData[i] = document.getElementById('polja' + i).value;
}
}
...
...
};
}
function drawPieChart(canvas){
...
...
return{
getmyData(
);
...
...
};
}
</script>
如何在函数中获取myData&#34; drawPieChart&#34;除了使myData全局变量?谢谢 我正在考虑在html中制作像PieChart.getMyData(Table.takeData)这样的东西;或类似的东西
答案 0 :(得分:0)
根据您的修改,您可以执行以下操作:
function Table(el, data) {
var myData = new Array(); // Not global but accessible to every function that gets returned here
return{
// removed unnecessary code
takeData: function(){
for (var i = 0; i < val2; i++) {
myData[i] = document.getElementById('polja' + i).value;
}
},
function drawPieChart(canvas){
// Can access myData here
}
}
}
答案 1 :(得分:0)
首先,您的代码存在问题:
您在<body>
内有一块JavaScript。这不是标准的,不允许的,并且会失败。具体来说,它将在页面上显示为文本,而不是作为JavaScript执行。所有JavaScript都必须位于以下位置之一:内联<script>
标记,使用<script>
标记加载的外部文件,onload="..."
等事件属性或属性可以运行JavaScript,例如href="javascript:..."
元素上的<a>
。
您从Table()
返回的对象中存在语法错误;散列键/值对(showData()
和takeData()
)之间没有逗号分隔符。逗号是必填项。
您有一些未初始化的变量,包括val2
,data
和canvas
。您可能只是摘录了代码以省略相关的初始化,但在Stack Overflow上提问时,您应该尝试提供完整的自包含代码示例。
关于你的问题,你从tab
返回的对象Table()
看起来非常像任何OO语言中的类的实例对象。 JavaScript通过原型模式支持OO范例,因此一种明智的方法是通过定义其原型使Table
成为完整的类。如果您执行此操作,则可以使用tab
运算符创建Table
new
的完整实例,然后将myData
数组存储为属性tab
。以下是基于示例代码的随机演示:
HTML:
<div id="tab">
<input id="polja0" value="def1"/>
<input id="polja1" value="def2"/>
<input id="polja2" value="def3"/>
</div>
JS:
function Table(el,data) {
this.el = el;
return this;
}
Table.prototype.showData = function() {
// ...
};
Table.prototype.takeData = function() {
this.myData = new Array();
var val2 = this.el.children.length;
for (var i = 0; i < val2; ++i)
this.myData[i] = document.getElementById('polja'+i).value;
};
Table.prototype.drawPieChart = function(canvas) {
alert(this.myData);
};
var el = document.getElementById('tab');
data = 'whatever';
var tab = new Table(el,data);
tab.showData();
tab.takeData();
canvas = 'whatever';
var PieChart = tab.drawPieChart(canvas);
答案 2 :(得分:0)
只是抛出另一种可能的方法,比原型解决方案简单得多,你可以在takeData()
上取一个OUT参数,然后将它作为参数传递给drawPieChart()
:
HTML:
<div id="tab">
<input id="polja0" value="def1"/>
<input id="polja1" value="def2"/>
<input id="polja2" value="def3"/>
</div>
JS:
function Table(el,data) {
return {
showData:function() {
// ...
},
takeData:function(OUT) {
OUT.myData = new Array();
var val2 = el.children.length; // closure
for (var i = 0; i < val2; ++i)
OUT.myData[i] = document.getElementById('polja'+i).value;
}
};
}
function drawPieChart(canvas,myData) {
alert(myData);
}
var el = document.getElementById('tab');
data = 'whatever';
var tab = new Table(el,data);
tab.showData();
var takeDataOUT = {};
tab.takeData(takeDataOUT);
canvas = 'whatever';
var PieChart = drawPieChart(canvas,takeDataOUT.myData);