且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用GCC重命名Object.defineProperty创建的属性

更新时间: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$.