使用 Polymer 默认 属性 函数时是否需要包装 `new Object()`?

Do I need to wrap `new Object()` when using Polymer default property function?

Polymer 1.0 documentation states,

If the default value should be an array or object unique to the instance, create the array or object inside a function.

是否需要将 new Thing(params) 等对象构造函数包装在匿名函数中?

这意味着当 属性 的值是一个对象引用时,库不会努力决定是否应该对其进行值复制。

基础知识在javascript:

var C = function() {
}
C.prototype.property = {};
var a = new C();
var b = new C();
a.property.value = "Hello world"
console.log(b.property); // object { "value": "Hello world" }

ab 共享对同一对象引用的引用。相对于:

var C = function() {
    this.property = {};
}
var a = new C();
var b = new C();
a.property.value = "Hello world"
console.log(b.property); // empty object

每次实例化对象时都会创建一个新的对象引用。在 javascript 中处理对象时,始终需要注意这一点。数组实际上是对象,所以它们遵循相同的规则。

我认为部分文档指的是 this

The value may either be a primitive value, or a function that returns a value (which should be used for initializing Objects and Arrays to avoid shared objects on instances).

在此示例中,声明了一个名为 data 的 属性,它是一个 Object。此 属性 的值正在调用 function,它是 returns 一个新的 Object