【问题标题】:define a method inside an object containing arrays of objects (javascript)在包含对象数组的对象内定义一个方法(javascript)
【发布时间】:2018-08-03 22:22:37
【问题描述】:

我创建了一个对象 movies 和方法如下;

    var movies = [
          {
            aa : "value01"
            bb : 6.5
          },
          {
            aa : "value02"
            bb : 6
          },
          {
            aa : "value02"
            bb : 7.5
          },
          percentage:function(movieRating, scale){
            return (movieRating/scale) * 100;
          }
    ]

访问对象和方法我尝试使用以下方法;

    theRating = (movies.percentage(movies[0].bb,10));

但是运行脚本给了我一个;

    Uncaught SyntaxError: Unexpected token :

实际代码在https://pastebin.com/9tvrSVJ1

我所做的工作在https://pastebin.com/LkCwzWXn中找到

谁能指出第一个版本的代码哪里错了。

提前致谢。

【问题讨论】:

    标签: javascript arrays object methods


    【解决方案1】:

    它不起作用的原因是因为您试图将一个成员添加到您的数组中,就好像它是一个对象属性一样。如果你需要向数组中添加一个函数,你可以这样做:

    (另外,请注意,您收到的错误是因为您的电影对象中的属性没有用逗号分隔。)

    var movies = [
          {
            aa : "value01",
            bb : 6.5
          },
          {
            aa : "value02",
            bb : 6
          },
          {
            aa : "value02",
            bb : 7.5
          },
          function (movieRating, scale){
            return (movieRating / scale) * 100;
          }
    ]
    

    然后可以像这样调用该函数:

    movies[3](1, 10);
    

    我不确定你的实现,但是如果它的索引可能会发生变化,将函数保留在数组中似乎有点奇怪。

    【讨论】:

      【解决方案2】:

      试试这个: var电影= [ { aa :“value01”, bb : 6.5 }, { aa:“value02”, bb : 6 }, { aa:“value02”, bb : 7.5 }, { 百分比:函数(movieRating,比例){ 返回(movieRating/scale)* 100; } }

      ]
      

      并将评分称为 theRating = movies[3].percentage(movies[0].bb, 10)

      【讨论】:

        【解决方案3】:

        或者,如果您(像我一样)不喜欢我之前的回答并且不想调用数组内的函数,您可以像定义任何其他函数一样在数组外定义它:

        var movies = [
          {
            aa : "value01",
            bb : 6.5
          },
          {
            aa : "value02",
            bb : 6
          },
          {
            aa : "value02",
            bb : 7.5
          }
        ];
        
        function percentage (movieRating, scale) {
          return (movieRating / scale) * 100;
        };
        

        然后你可以像这样调用你的theRating 变量:

        theRating = (percentage(movies[0].bb, 10));
        

        【讨论】:

        • 非常感谢您的回复。将尝试您提到的代码建议,并在完成后更新此帖子。
        最近更新 更多