javascript - 在 JavaScript 中将参数传递给类函数

标签 javascript class javascript-objects

这是一个奇怪的问题 - 我正在 Chrome 中调试一些 JavaScript 代码,我发现当我将参数传递给类函数时,它们实际上并没有被传递? 奇怪的是,有时这段代码可以工作,有时却不能。

这是我所得到的(我稍微精简了代码并删除了我认为不必要的内容)

<script type="text/javascript">
    $(document).ready(function () {
        var agentID = 'abcd-1234';
        var isCurrent = 'true';
        var colourUtilities = new ColorUtilities();
        var palette = colourUtilities.GeneratePalette(["#2c2656","#362d68","#3f3579","#483d8b","#51459d","#5a4dae","#6a5db8"]);

        GetData();

        function GetData() {
            var url = 'WebRequest.ashx?agentID=' + agentID + "&isCurrent=" + isCurrent;

            $.ajax({
                type: 'POST',
                url: url,
                dataType: 'json',
                success: function (data) {
                    BuildCharts(data);
                },
                error: function (XMLHttpRequest, status, errorThrown) {
                    alert(errorThrown);
                }
            });
        }

        function BuildCharts(data) {
            BuildSummaryBubbleChart(data);
        }

        function BuildSummaryBubbleChart(data) {
            var statusDistributionLabels = [];
            var statusDistributionCounts = [];

            for (var status in data) {
                statusDistributionLabels.push(status);
                statusDistributionCounts.push(data[status])
            }
            var chartBuilder = new ChartBuilder(palette, palette[0]);
            var canvasName = "cVacateDistribution";
            chartBuilder.BuildBubbleLineChart(canvasName, statusDistributionLabels, statusDistributionCounts, "No data available.");
        }
});

这部分工作正常 - 正如你在 chrome 中调试时所看到的,当我调用 chartBuilder.BuildBubbleLineChart 时,所有内容都有值。 : Debugging in Chrome - 如您所见,chartBuilder 有一个值,canvasName 变量有一个值并且正在正确传递,数组也有值。

然而 - 继续调试,当我们跳转到 BuildBubbleLineChart 函数时,这些值都是未定义的: Continuing to debug

我一生都无法弄清楚出了什么问题。 这是 ChartBuilder 类的代码(删减):

function ChartBuilder(palette, mainColor) {
var thisBuilder = {};
var charts = [];

//Builds a horizontal chart of circles separated by lines with labels
thisBuilder.BuildBubbleLineChart = function ({
    canvasID,
    labels,
    data,
    noDataMessage = 'No data',
    symbols = null } = {}) {
    var canvas = document.getElementById(canvasID);

    if (canvas == undefined) {
        console.log('Error: (BuildBubbleLineChart) Your canvas could not be found');
        return;
    }

    thisBuilder.ClearChart(canvasID);

    var ctx = canvas.getContext('2d');
    var canvasWidth = canvas.width;
    var canvasHeight = canvas.height;

    if (NoData(data)) {
        canvas.width = 200;
        FillNoDataText(ctx, noDataMessage, 100, canvasHeight / 2);
        PushCustomChart(canvasID);
        return;
    }

    //etc - goes on to build the chart
}

ChartBuilder 类中还有大量其他函数,但在任何时候都不会调用/使用任何函数。

我的问题是,当我调用BuildBubbleLineChart时函数并向其传递值,显然它到达了该函数并且没有值,因此它记录错误 Error: (BuildBubbleLineChart) Your canvas could not be found并返回。

非常感谢任何帮助!

最佳答案

仔细看看参数:

thisBuilder.BuildBubbleLineChart = function({
    canvasID,
    labels,
    data,
    noDataMessage = "No data",
    symbols = null
  } = {}){

}

这些是destructured parameters ,因此该函数需要传递这样的对象: { canvasID: "...", labels: [...], data: " ...",noDataMessage:"...",符号:[...] }。它期望将多个参数作为单独的值传递。

如果没有传递参数,则使用具有给定默认值的空对象{}。由于字符串 "cVacateDistribution" 没有属性 canvasIDlabelsdatanoDataMessagesymbols,所有这些都将是它们的默认值或未定义

关于javascript - 在 JavaScript 中将参数传递给类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026604/

相关文章:

javascript - 为什么在 react jsx 中使用时 if-else 条件不起作用

javascript - 从对象数组创建树层次结构

java - 无法从自定义类创建对象

无法识别 C++ 虚函数

Javascript:在子对象属性中访问父对象的属性

javascript - 如何通过事件增加/减少对象属性值?

javascript - 是否有可能 Math.random() === Math.random()

javascript - 如何在asp.net c#中的服务器端获取XMLHTTPRequest对象

c++ - 关于类定义的问题

javascript - JavaScript 中使用 Wea​​kMap 的多个私有(private)属性