javascript从另一个函数获取数组

时间:2014-12-08 17:20:45

标签: javascript

<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)这样的东西;或类似的东西

3 个答案:

答案 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)

首先,您的代码存在问题:

  1. 您在<body>内有一块JavaScript。这不是标准的,不允许的,并且会失败。具体来说,它将在页面上显示为文本,而不是作为JavaScript执行。所有JavaScript都必须位于以下位置之一:内联<script>标记,使用<script>标记加载的外部文件,onload="..."等事件属性或属性可以运行JavaScript,例如href="javascript:..."元素上的<a>

  2. 您从Table()返回的对象中存在语法错误;散列键/值对(showData()takeData())之间没有逗号分隔符。逗号是必填项。

  3. 您有一些未初始化的变量,包括val2datacanvas。您可能只是摘录了代码以省略相关的初始化,但在Stack Overflow上提问时,您应该尝试提供完整的自包含代码示例。

  4. 关于你的问题,你从tab返回的对象Table()看起来非常像任何OO语言中的类的实例对象。 JavaScript通过原型模式支持OO范例,因此一种明智的方法是通过定义其原型使Table成为完整的类。如果您执行此操作,则可以使用tab运算符创建Table new的完整实例,然后将myData数组存储为属性tab。以下是基于示例代码的随机演示:

    http://jsfiddle.net/awytnngu/

    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()

http://jsfiddle.net/uv8bh6nj/

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);