在声明聚合物元素的属性时,为什么值有时会返回{}?

时间:2016-12-09 22:24:08

标签: javascript polymer

我很好奇的部分是使用

的原因
value: function() { return {}; }

而不是

value: {}

以下是示例代码:

<script>
    Polymer({

      is: 'polymer-demo',

      properties: {
        data: {
            type: Object,
            notify: true,
            value: function() { return {}; }
          }
      },

    });
  </script>

3 个答案:

答案 0 :(得分:5)

example

中对此进行了解释
  

将属性初始化为对象或数组值时,请使用函数确保每个元素都获得自己的值副本,而不是在元素的所有实例之间共享对象或数组。

虽然您可以使用{},但这将是每个元素共享的相同对象,因此如果某个元素的值发生变异,则所有其他元素都会看到应用了相同的更改。这不是你想要发生的事情。通过使用函数,将为每个元素调用该函数,并且每个调用将生成一个新的单独对象。然后,突变将仅适用于该单个元素而不会影响其他元素。

答案 1 :(得分:2)

我觉得vuejs要求将data组件呈现为函数而不是它所对象的原因相同:

  

在基本示例中,我们将数据直接声明为普通对象。   这是因为我们只使用新的Vue()创建了一个实例。   但是,在定义组件时,必须将数据声明为a   返回初始数据对象的函数。 为什么?因为会有   使用相同的定义创建的许多实例。如果我们仍然使用   数据的普通对象,相同的对象将通过引用共享   跨所有实例创建!每次都提供数据功能   创建一个新实例,我们可以简单地调用它来返回一个新的实例   初始数据的副本。

因此,确保给予组件的数据始终表示新的“负载”

希望这有帮助!

答案 2 :(得分:0)

通常这是在您想要显示的情况下完成的,您不仅可以返回固定值,还可以计算动态值并返回此值,但是您懒得返回超过{}的内容。有时候你在框架中声明在某个地方使用的东西,并且预期会有一个函数返回一个对象,而不仅仅是一个固定的值或对象。

您可以通过更改代码,执行代码以及查看错误或不同行为来找到答案。