更新时间:2021-12-29 00:58:20
正如@owler正确回答的那样,Closure-compiler无法重命名Object.defineProperty
创建的属性,因为它们总是被引用.相反,请使用Object.defineProperties
,因为它们可以带引号也可以不带引号.
As @owler correctly answered, Closure-compiler can not rename Object.defineProperty
created properties because they are always quoted. Instead, use Object.defineProperties
as they may be either quoted or unquoted.
/**
* @constructor
*/
function Container() {
var items = [];
Object.defineProperties(this, {
items$: {
set: function(value) {
items = value;
},
get: function() {
return items;
}
}
});
}
var container = new Container();
container.items$ = [1,2,3];
console.log(container.items$);
注意:通过Object.defineProperties定义的属性不适合基于类型的重命名,因此,仅当未在externs集合中的任何类型上定义该属性时,才会重命名.这样,我的示例将items
属性替换为items$
.
Note: Properties defined via Object.defineProperties are not eligible for type-based renaming and as such will only be renamed if the property is not defined on any type in the externs set. As such, my example replaces the items
property with items$
.