【问题标题】:Passing optional parameter in JavaScript Function在 JavaScript 函数中传递可选参数
【发布时间】:2014-03-25 13:21:01
【问题描述】:

是否可以将可选参数传递给 javascript 中的函数?

我在 JavaScript 中有一个函数,并且我想要经常使用,所以,我在函数内部使用 var 选项,我想将变量传递给 param。

我的功能如下:

javascript:

function DrawChartPie(rows, title, chart_div, legend_position) {
google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Tipo');
        data.addColumn('number', 'Quantidade');
        data.addRows(rows);

        var options = {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };

        var chart = new google.visualization.PieChart(document.getElementById(chart_div));
        chart.draw(data, options);
    }

}

帮手:

 html = pie_chart(data, title, div, pos_leg)

我想做什么,但没有用:

帮手:

 def pie_data(data_pie, div, options = {})
 ....
 optional = {
            width: 900,
            height: 500,
            title: title,
            legend: pos_leg,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
...
html = pie_chart(data, title, div, pos_leg, optional)

javascript:

function DrawChartPie(rows, title, chart_div, legend_position, optional = {}) {
google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Tipo');
        data.addColumn('number', 'Quantidade');
        data.addRows(rows);

        var option = optional || {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };

        var chart = new google.visualization.PieChart(document.getElementById(chart_div));
        chart.draw(data, option);
    }
}

当我尝试时,什么都不显示。

有可能做这样的事情吗?如果是,有人可以帮助我吗?

谢谢 =] 对不起我的英语:P

---- 更新 ---- 我更新了我的方法,如 sugest,但现在我遇到了另一个错误。

javascript:

 function DrawChartPie(rows, title, chart_div, legend_position, optional) {
 ...
 var optional = optional || {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
 ...

 }

帮手:

 def pie_data(data_pie, div, options = {}){
 ...
 optional = {
            width: 900,
            height: 500,
            title: title,
            legend: pos_leg,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
  html = pie_chart(data, title, div, pos_leg, optional)
  }

我的错误:参数数量错误(5 比 4)

我已经重启了我的服务器:P

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-3 rails-3.0.10


    【解决方案1】:

    有点。从技术上讲,所有 JavaScript 参数都是可选的,默认为 undefined。这就是您拥有不同默认参数的方式。

    function DrawChartPie(rows, title, chart_div, legend_position, optional) {
      optional = optional || {};
    

    如果您期望 nullNaN0""(空字符串)和 false 等虚假值作为可选参数的值,则可以使用它来代替:

    function DrawChartPie(rows, title, chart_div, legend_position, optional) {
      optional = optional === undefined ? {} : optional;
    

    【讨论】:

    • 嗨,我试过了,javascript 工作了\o/,但现在我遇到了其他问题,在我的助手函数中,我传递了 5 个参数,在我的 javascript 中我有 5参数现在,但我收到一个错误:参数数量错误(5 比 4),我重新启动了我的服务器,但仍然是 =/
    • @lorena 你的环境是什么,你在哪里看到这个错误?我希望每天都能看到这个错误,但我敢肯定我从来没有。
    • 我正在开发环境中测试这个应用程序,当我重新启动这个页面时看到这个错误,页面有图表。
    • @lorena 错误不是来自 JavaScript 运行时。要么你的 Ruby 代码有错误,要么这是 ROR 特有的。我也不熟悉。
    • 哦,是的,你帮了我很多,谢谢=],我会在ruby论坛中检查这个错误,谢谢你的解释
    【解决方案2】:

    Passing default/optional parameter to functions, is not possible until ECMA Script 6 standard is implemented.

    但你能做的是,

    function DrawChartPie(rows, title, chart_div, legend_position, optional) {
         optional = optional || {};
    

    如果optional 有一个假值,那么{} 将被分配给optional

    optional = optional || {};
    

    和写一样

    if (!optional) {
        optional = {};
    }
    

    【讨论】:

    • 嗨 =],感谢您的回复,现在可以使用,但我现在有其他错误,请您查看我的答案中的更新吗?
    【解决方案3】:

    我发现将任何可选值传递给函数的最佳方法是使用对象而不是参数列表。这也意味着参数也不必按任何顺序排列。您需要做的就是在使用属性之前测试它们是否存在,就像对任何对象一样。

    function DrawChartPie(options) {
      if (options.rows) { data.addRows(options.rows); }
      if (options.title) { document.getElementById('title').innerHTML = options.title; }
      if (options.optional) { // loop over the object or whatever; }
    }
    
    DrawChartPie({
      rows: data,
      title: 'mychart',
      optional: {}
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      相关资源
      最近更新 更多