对象输出返回NAN

时间:2019-06-11 10:33:08

标签: javascript object

这是我的代码

const products = 
      [ 
          {

    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
    "coefficient":2,
    "price": () => 2000 * this.coefficient
  },
  {

    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla",
    "coefficient":3, 
    "price": () => 2000 * this.coefficient
  },
] 

我想返回价格取决于系数,但是当我执行时

products[0].price() // return NaN

我该如何解决?

谢谢。

4 个答案:

答案 0 :(得分:6)

尝试一下:

products = [
  {
    id: 1,
    title:
      "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    body:
      "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
    coefficient: 2,
    price: function() {
      return 2000 * this.coefficient;
    }
  },
  {
    id: 2,
    title: "qui est esse",
    body:
      "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla",
    coff: 3,
    price: function() {
      return 2000 * this.coefficient;
    }
  }
];

console.log(products[0].price()) // 4000
console.log(products[1].price()) // 6000

答案 1 :(得分:5)

这是由于箭头功能处理var result = await query_promise('SELECT Link FROM Link_Foto where ID_Utente="' + utente + '"'); 范围的方式。在这种情况下,将箭头功能(this)替换为传统的JS功能(() => this.something)将解决您的问题。

答案 2 :(得分:3)

对于箭头函数,this的值不基于执行该函数所使用的对象引用。而是使用声明所在的闭包中的this引用。选中the documentation here on MDN。在您的情况下,this.coefficient是不确定的,将其与2000相乘将得到NaN

如果需要this引用调用了price函数的对象引用,则可以将箭头函数更改为适当的函数。更改后的代码应如下所示:

products = [
  {
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
    "coefficient":2,
    "price": function() { return 2000 * this.coefficient; }
  }
];

答案 3 :(得分:0)

您可以使用此:

                const products =
                [
                    {

                        "id": 1,
                        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
                        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
                        "coefficient": 2,
                        price() {
                            return 2000 * this.coefficient
                        }
                    },
                    {

                        "id": 2,
                        "title": "qui est esse",
                        "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla",
                        "coefficient": 3,
                        price() {
                            return 2000 * this.coefficient
                        }

                    },
                ]